omerbn Posted June 12, 2008 Share Posted June 12, 2008 hi guys, I've been trying to find out what am I doing worng. It looks like there is a variable scope bug? take a look: Dim $count = 0 Dim $arr[1] ;declaring an array of size 1 While 1=1 $soft_key = RegEnumKey ($main_key, $count) ; this is the exit condition If @error <> 0 then ExitLoop EndIf $soft_name = RegRead ($main_key & "\" & $soft_key, "Displayname") $soft_name = StringReplace ($soft_name, " (remove only)", "") If $soft_name <> "" Then $arr[uBound($arr)-1] = "s" reDim $arr[uBound($arr)+1] EndIf $count += 1 Wend I get this error message: $arr[0] = "s" $arr^ERROR Error: Subscript used with non-Array variable Can you please advise? Thx, Omerbn Link to comment Share on other sites More sharing options...
PsaltyDS Posted June 12, 2008 Share Posted June 12, 2008 hi guys, I've been trying to find out what am I doing worng. It looks like there is a variable scope bug? take a look: Dim $count = 0 Dim $arr[1] ;declaring an array of size 1 While 1=1 $soft_key = RegEnumKey ($main_key, $count) ; this is the exit condition If @error <> 0 then ExitLoop EndIf $soft_name = RegRead ($main_key & "\" & $soft_key, "Displayname") $soft_name = StringReplace ($soft_name, " (remove only)", "") If $soft_name <> "" Then $arr[uBound($arr)-1] = "s" reDim $arr[uBound($arr)+1] EndIf $count += 1 Wend I get this error message: $arr[0] = "s" $arr^ERROR Error: Subscript used with non-Array variable Can you please advise? Thx, Omerbn The registry stuff is a distractor, why include it in the example? This works fine: #include <Array.au3>; Only for _ArrayDisplay() Dim $count = 0 Dim $arr[1] While 1 = 1 If $count >= 10 Then ExitLoop $arr[UBound($arr) - 1] = "s" ReDim $arr[UBound($arr) + 1] $count += 1 WEnd _ArrayDisplay($arr, "$arr") Now, how big is $arr getting before you get this error in your version? Or, does it error on the first pass? Throw in some ConsoleWrite()'s or something to monitor what is happening while it runs. Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law Link to comment Share on other sites More sharing options...
omerbn Posted June 15, 2008 Author Share Posted June 15, 2008 The registry stuff is a distractor, why include it in the example? This works fine: #include <Array.au3>; Only for _ArrayDisplay() Dim $count = 0 Dim $arr[1] While 1 = 1 If $count >= 10 Then ExitLoop $arr[UBound($arr) - 1] = "s" ReDim $arr[UBound($arr) + 1] $count += 1 WEnd _ArrayDisplay($arr, "$arr") Now, how big is $arr getting before you get this error in your version? Or, does it error on the first pass? Throw in some ConsoleWrite()'s or something to monitor what is happening while it runs. Hi again, First, thanx for your quick reply. Second, You example works great but I have another question: how can I "pass" an array as a parameter to a function? e.g.: Dim $arr[12] $arr[0] = 1 $arr[1] = 2 $arr = enlargeArr($arr) function enlargeArr($arr) { reDim $arr[uBound($arr)+1] return $arr } It doesn't work for me I get an error message which writes that $arr is not an array variable. Link to comment Share on other sites More sharing options...
Malkey Posted June 15, 2008 Share Posted June 15, 2008 Hi again, First, thanx for your quick reply. Second, You example works great but I have another question: how can I "pass" an array as a parameter to a function? e.g.: Dim $arr[12] $arr[0] = 1 $arr[1] = 2 $arr = enlargeArr($arr) function enlargeArr($arr) { reDim $arr[uBound($arr)+1] return $arr } It doesn't work for me I get an error message which writes that $arr is not an array variable.Dim $arr[12] $arr[0] = 1 $arr[1] = 2 $arr = enlargeArr($arr) MsgBox(0,"","$array[" & UBound($arr) &"]") Func enlargeArr($arr) reDim $arr[UBound($arr)+1] return $arr EndFunc Link to comment Share on other sites More sharing options...
MHz Posted June 15, 2008 Share Posted June 15, 2008 I would use ByRef to pass the array into the function to be directly manipulated or use it globally by not using it as a parameter but as a global array variable and the function should see and use it. Using ByRef example ; declare an array with 1 element Global $test[1] = [1] ; add another element using ByRef ; so the array variable itself is changed _ArrayAddIndex($test, 1) ; assign a value to the 2nd element $test[1] = 2 ; show the result For $i = 0 To UBound($test) - 1 MsgBox(0x40000, '$test[' & $i & ']', $test[$i]) Next ; and once again add 2 more elements _ArrayAddIndex($test, 2) ; assign a value to the 3rd and 4th elements $test[2] = 3 $test[3] = 4 ; show the result For $i = 0 To UBound($test) - 1 MsgBox(0x40000, '$test[' & $i & ']', $test[$i]) Next Exit Func _ArrayAddIndex(ByRef $array, $index = 1) ; resize an array by increasing the size ; with the amount stored in $index ReDim $array[UBound($array) + $index] EndFunc Link to comment Share on other sites More sharing options...
omerbn Posted June 16, 2008 Author Share Posted June 16, 2008 I would use ByRef to pass the array into the function to be directly manipulated or use it globally by not using it as a parameter but as a global array variable and the function should see and use it. Using ByRef example ; declare an array with 1 element Global $test[1] = [1] ; add another element using ByRef ; so the array variable itself is changed _ArrayAddIndex($test, 1) ; assign a value to the 2nd element $test[1] = 2 ; show the result For $i = 0 To UBound($test) - 1 MsgBox(0x40000, '$test[' & $i & ']', $test[$i]) Next ; and once again add 2 more elements _ArrayAddIndex($test, 2) ; assign a value to the 3rd and 4th elements $test[2] = 3 $test[3] = 4 ; show the result For $i = 0 To UBound($test) - 1 MsgBox(0x40000, '$test[' & $i & ']', $test[$i]) Next Exit Func _ArrayAddIndex(ByRef $array, $index = 1) ; resize an array by increasing the size ; with the amount stored in $index ReDim $array[UBound($array) + $index] EndFunc Thanks ALOT man!! You really helped me! 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