Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Func StringPrepareExpression($s, $d=False)
- Local a = StringRegExpReplace, b = StringReplace
- If $d Then ConsoleWrite("!!! " & $s & @CRLF) ; debug
- Local $v = StringRegExp($s, "\(([^()]+)\)", 3), $i, $f
- If (Not @error) Then
- For $i = 0 To UBound($v)-1
- $s = StringReplace($s, "(" & $v[$i] & ")", "[$var" & $i & "]", 1, 1)
- If $d Then ConsoleWrite("!!! " & $v[$i] & " --> " & "$var" & $i & @CRLF) ; debug
- Next
- If $d Then ConsoleWrite("!!! " & $s & @CRLF) ; debug
- If (StringInStr($s, "(") > 0) Then $s = StringPrepareExpression($s, $d)
- EndIf
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Local $x = ".+?"
- $s = "(" & $s & ")"
- $s = a($s, b("\(\s*(x)\s*\+\s*(x)\s*\)", "x", $x), "Add[(\1), (\2)]")
- $s = a($s, b("\(\s*(x)\s*\-\s*(x)\s*\)", "x", $x), "Sub[(\1), (\2)]")
- $s = a($s, b("\(\s*(x)\s*\*\s*(x)\s*\)", "x", $x), "Mul[(\1), (\2)]")
- $s = a($s, b("\(\s*(x)\s*\/\s*(x)\s*\)", "x", $x), "Div[(\1), (\2)]")
- $s = a($s, b("\(\s*(x)\s*\%\s*(x)\s*\)", "x", $x), "Mod[(\1), (\2)]")
- $s = a($s, b("\(\s*(x)\s*\^\s*(x)\s*\)", "x", $x), "Pow[(\1), (\2)]")
- $s = StringReplace($s, "[", "(")
- $s = StringReplace($s, "]", ")")
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- If $d Then ConsoleWrite("!!! " & $s & @CRLF) ; debug
- If IsArray($v) Then
- For $i = 0 To UBound($v)-1
- $f = StringPrepareExpression($v[$i])
- ;~ $s = StringReplace($s, "$var" & $i, $f)
- $s = StringReplace($s, "($var" & $i & ")", $f)
- If $d Then ConsoleWrite("!!! $var" & $i & " --> " & $f & @CRLF) ; debug
- Next
- EndIf
- If $d Then ConsoleWrite("!!! " & $s & @CRLF) ; debug
- Return $s
- EndFunc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement