Sign in to follow this  
Followers 0
oasis375

Please explain this strange behavior

5 posts in this topic

$foo = "hello"
If $foo = 0 Then ConsoleWrite("wrong")

It took me some time till I found the mistake in AutoItScript code.

First I assing a value to the variable, then I check if the variable is 0, and the result is positive.

Other version:

$foo = 0 ;default value
;some processing here
    $foo = "hello" ;assignment by process
;end of process
If $foo = 0 Then ConsoleWrite("process failed") ;final check to know process result

 

Share this post


Link to post
Share on other sites



oasis375,

When you use comparison operators AutoIt automatically converts then arguments to numbers - and as "hello" converts to 0 you find that the comparison is true. What you need to do is when comparing strings is to use the == operator which forces both sides to string format:

$foo = "hello"
If $foo == 0 Then ConsoleWrite("wrong")
And to prevent the next question of "Why does AutoIt do this", it is a result of using non-typed variables - this was an early design decision by Jon to make AutoIt easy to use which does, at times, cause problems if not properly understood. ;)

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

Edit: Melba23 types faster!

 

You are comparing a string to a number. I don't even know why this is allowed in autoit but again, this is autoit.
Anyway if you want to compare if the string is equal to an string 0 then use double =.

$foo = "hello"
If $foo == 0 Then ConsoleWrite("wrong" & @LF)

If you want to check if your string is not empty then do it like this:

$foo = "hello"
If $foo <> "" Then ConsoleWrite("wrong" & @LF)
Edited by AutID

Share this post


Link to post
Share on other sites

AutID,

 

You are comparing a string to a bool

Not so - 0 is a number, booleans are True/False. But your suggested solution is correct. ;)

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

AutID,

 

Not so - 0 is a number, booleans are True/False. But your suggested solution is correct. ;)

M23

Again you are faster, I corrected that. Confusion!

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0