GO7 Posted July 5, 2004 Posted July 5, 2004 Hi all ! Here is my problem : I want to evaluate a string but I can't make it work with Eval() or Number(). Here is an example : $a = 2 $b = 3 $eq = "a^b" ;THOSE 3 LINES CANNOT BE CHANGED ! $eq = StringReplace($eq,"a",$a) $eq = StringReplace($eq,"b",$b) $res = Number($eq) msgbox(0,"Evaluation",$eq & "=" & $res);will produce 2^3=2 The problem is that the number() fonction automatically stops when a character is detected, like the "^" in "2^3" Number(2^3) will produce the right answer (8) but Number("2^3") equals Number("2") = 2 Anyone know how to correctly evaluate a random equation ? Thanks a lot in advance
CyberSlug Posted July 5, 2004 Posted July 5, 2004 (edited) Eval and Number probably do not work the way you expect; you cannot evaluate an arithmetic expression with those functions. Look at the documentation examples for those functions to see their intended use.Here's what you need to do:1) Write out the string to a secondary AutoIt script that runs.2) The secondary AutoIt script writes its output to a temp file.3) Your main script gets the value from the temp file and deletes the secondary script and temp file$a = 2 $b = 3 $eq = $a & "^" & $b $AUTOIT = '"C:\Program Files\AutoIt3\AutoIt3.exe"' FileWriteLine("C:\tempEval.au3", '$result = ' & $eq) FileWriteLine("C:\tempEval.au3", 'FileWriteLine("C:\tempResult.txt", $result)') RunWait($AUTOIT & "C:\tempEval.au3") $eval = FileReadLine("C:\tempResult.txt") FileDelete("C:\tempResult.txt") FileDelete("C:\tempEval.au3") MsgBox(4096,"", $eval) Edited July 5, 2004 by CyberSlug Use Mozilla | Take a look at My Disorganized AutoIt stuff | Very very old: AutoBuilder 11 Jan 2005 prototype I need to update my sig!
GO7 Posted July 5, 2004 Author Posted July 5, 2004 Thanks ! It seems to work !But it's a pity that there's no other way to do this arithmetic evaluation... Eval() or Number() should do the job...I'm going to use this script to find an answer to a random equation... So I need to brute force it...With so much things to do for each test (multiple nested for 0 to 9 next) my script won't be very effective and way to sloooooooooow Anyway thanks for your help !
Nutster Posted July 6, 2004 Posted July 6, 2004 I have Exec on my to do list. It will determine a value using variables, operators and certain functions. It will not allow you to call potentially destructive functions, like RegDelete(), but will allow purely math functions like Sin(). It is a little ways down the list, after a bunch of things, like work. David NuttallNuttall Computer Consulting An Aquarius born during the Age of Aquarius AutoIt allows me to re-invent the wheel so much faster. I'm off to write a wizard, a wonderful wizard of odd...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now