Xwolf Posted September 18, 2008 Share Posted September 18, 2008 (edited) I was encountered a problem as following. #include <Array.au3> Local $z1[3] $z1[0] = 1 $z1[1] = 0 $z1[2] = 0 For $i=0 To (UBound($z1)-1) Step 1 If $z1[$i]=0 Then _ArrayDelete($z1,$i) $i -= 1 Else ConsoleWrite($z1[$i] & @CRLF) EndIf Next This is the result. 1 E:\Study\AutoIt3\Scripts\2.au3 (10) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.: If $z1[$i]=0 Then If ^ ERROR If you can not find solution for this question, please thinking in some minutes before looking down. I was amazing of the result. thinking ... testing ... I understand it , when i test this code as folowing. >_< Local $z1=5 For $i=0 To $z1 Step 1 ConsoleWrite($i & @CRLF) $z1 = 2 Next This is the result. 0 1 2 3 4 5 I looked back to the HELP FILE (For...To...Step...Next ) and find this "If stepVal or stop is a variable, its value is only read the first time the loop executes." Oh, my god. Maybe this can help somebody like me. LOL Edited September 18, 2008 by Xwolf Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted September 18, 2008 Moderators Share Posted September 18, 2008 You're decreasing the ubound value of the array every time you delete a part index/element out of it, but you make the To value what it was originally. #include <Array.au3> Local $z1[3] $z1[0] = 1 $z1[1] = 0 $z1[2] = 0 $a_z1_temp = $z1 For $i=0 To (UBound($z1)-1) If $z1[$i]=0 Then _ArrayDelete($a_z1_temp,$i) EndIf Next _ArrayDisplay($z1) $z1 = $a_z1_temp _ArrayDisplay($z1) Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
Xwolf Posted September 18, 2008 Author Share Posted September 18, 2008 (edited) You're decreasing the ubound value of the array every time you delete a part index/element out of it, but you make the To value what it was originally. #include <Array.au3> Local $z1[3] $z1[0] = 1 $z1[1] = 0 $z1[2] = 0 $a_z1_temp = $z1 For $i=0 To (UBound($z1)-1) If $z1[$i]=0 Then _ArrayDelete($a_z1_temp,$i) EndIf Next _ArrayDisplay($z1) $z1 = $a_z1_temp _ArrayDisplay($z1)Thanks very much. Maybe it's useful for somebody else also. Edited September 18, 2008 by Xwolf Link to comment Share on other sites More sharing options...
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