autoit - 使用stringreplace函数随机化文本替换

时间:2014-05-19 06:56:36

标签: autoit

所以我需要使用stringreplace使用autoit替换字符串文本,但我需要随机化输出。

我需要的一个例子是

Stringreplace($string, "and", {also|as well})

我的最终目标是使用以下选项随机替换文本,基于单词“and”同时或也是

3 个答案:

答案 0 :(得分:3)

我很久以前写过这篇文章。

它将转换此

My name is {John|Peter|Mark}! {Regards|Cheers|Get lost}!

这样的事情

My name is John! Cheers!

它也适用于换行符。

Func SpintaxToTXT($TextWithSpintax)


    Dim $MSGMSG
    Dim $lines

    $lines = StringSplit($TextWithSpintax, @LF)


    For $z = 1 To $lines[0]

        If $z > 1 Then $MSGMSG &= @LF


        $d = StringSplit($lines[$z], "{}")

        For $i = 1 To $d[0]

            $MSGSplit = StringSplit($d[$i], "|")
            If @error Then
                $MSGMSG &= $MSGSplit[1]
                ContinueLoop
            EndIf
            $MSGMSG &= $MSGSplit[Random(1, $MSGSplit[0], 1)]

        Next



    Next


    Return $MSGMSG

EndFunc   ;==>SpintaxToTXT

答案 1 :(得分:0)

试试这个:

Global $options_A = StringSplit('also,as well,bla,blubb,that,this', ',', 2)

For $i = 0 To 20
    ConsoleWrite($options_A[Random(0, UBound($options_A) - 1, 1)] & @CRLF)
Next

答案 2 :(得分:0)

这是我之前制作的。与StringReplace完全相同,除了取代替换字符串之外,它需要一个返回替换字符串的函数。使用Xenobiologist的数组方法,您将获得所需的结果。

Local $sTest = "The cat and the dog and the rat."

ConsoleWrite(_StringReplaceCallback($sTest, "and", _MyCallback) & @LF)

Func _MyCallback($s)
    Local Static $aOptions = StringSplit("also|as well", "|")

    Return $aOptions[Random(1, $aOptions[0], 1)]
EndFunc   ;==>_MyCallback


Func _StringReplaceCallback($sString, $sFind, $funcReplace, $iOccurence = 0, $iCaseSense = 0)
    Local $sRet = ""
    Local $iDir = 1
    Local $iPos = 1

    If $iOccurence < 0 Then
        $iDir = -1
        $iPos = StringLen($sString)
    EndIf

    If $iOccurence = 0 Then $iOccurence = $iDir * StringLen($sString)

    While 1
        $i = StringInStr($sString, $sFind, $iCaseSense, $iDir, $iPos)

        If $iDir > 0 Then
            If Not $i Or Not $iOccurence Then
                $sRet &= StringMid($sString, $iPos)
                ExitLoop
            EndIf

            $sRet &= StringMid($sString, $iPos, $i - $iPos) & $funcReplace($sFind)
            $iPos = $i + StringLen($sFind)
        Else
            If Not $i Or Not $iOccurence Then
                $sRet = StringMid($sString, 1, $iPos) & $sRet
                ExitLoop
            EndIf

            $sRet = $funcReplace($sFind) & StringMid($sString, $i + StringLen($sFind), $iPos - $i - StringLen($sFind) + 1) & $sRet
            $iPos = $i - 1
        EndIf

        If $iOccurence <> 0 Then $iOccurence -= $iDir
    WEnd

    Return $sRet
EndFunc   ;==>_StringReplaceCallback

可能值得注意的是,实际上有一个更简单的解决方案,只要替换字符串不包含“和”(否则你将有一个无限循环),它一次只替换一个实例:

Local $sString = "The cat and the dog and the rat."
Local $aOptions = StringSplit("also|as well", "|")

Do
    $sString = StringReplace($sString, "and", $aOptions[Random(1, $aOptions[0], 1)], 1)
Until Not @extended

ConsoleWrite($sString & @LF)