toha Posted September 28, 2022 Share Posted September 28, 2022 can't access to array inside multi dimensional array. what im doing wrong and how this work in Autoit? local $arr[20][20][2] = [[[12,0],[2,0],[7,0],[8,0],[9,0],[5,1],[10,5],[9,6],[8,7],[7,8],[6,9],[6,10],[7,10],[8,10],[9,10],[10,10],[11,10]]] ;~ ConsoleWrite(Ubound($arr[0])) ; ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.: ConsoleWrite($arr[0][0][0]&@CRLF) ; 12. all ok ;~ wtf($arr[0]) ; ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.: local $hmm[20][2] = [[12,0],[2,0],[7,0],[8,0],[9,0],[5,1],[10,5],[9,6],[8,7],[7,8],[6,9],[6,10],[7,10],[8,10],[9,10],[10,10],[11,10]] wtf($hmm) ; working well but $hmm and $arr[0] suppose to be the same func wtf($ar) for $i=0 to 2 ConsoleWrite($ar[$i][0]&@CRLF) Next EndFunc Link to comment Share on other sites More sharing options...
argumentum Posted September 28, 2022 Share Posted September 28, 2022 (edited) Global $arr[20][20][2] = [[[12, 0], [2, 0], [7, 0], [8, 0], [9, 0], [5, 1], [10, 5], [9, 6], [8, 7], [7, 8], [6, 9], [6, 10], [7, 10], [8, 10], [9, 10], [10, 10], [11, 10]]] Global $hmm[20][2] = [[12, 0], [2, 0], [7, 0], [8, 0], [9, 0], [5, 1], [10, 5], [9, 6], [8, 7], [7, 8], [6, 9], [6, 10], [7, 10], [8, 10], [9, 10], [10, 10], [11, 10]] wtf($arr) ; working well but $hmm and $arr[0] suppose to be the same wtf($hmm) ; working well but $hmm and $arr[0] suppose to be the same Func wtf($ar) If UBound($ar, 3) Then For $i = 0 To UBound($ar) - 1 For $i2 = 0 To UBound($ar, 2) - 1 If $ar[$i][$i2][0] = "" Then ContinueLoop For $i3 = 0 To UBound($ar, 3) - 1 ConsoleWrite($ar[$i][$i2][$i3] & @TAB) Next ConsoleWrite(@CRLF) Next Next Else For $i = 0 To UBound($ar) - 1 If $ar[$i][0] = "" Then ContinueLoop For $i2 = 0 To UBound($ar, 2) - 1 ConsoleWrite($ar[$i][$i2] & @TAB) Next ConsoleWrite(@CRLF) Next EndIf ConsoleWrite('> ======================================================================' & @CRLF) EndFunc ;==>wtf so, what do you wanna do ? Edited September 28, 2022 by argumentum better code Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting. Link to comment Share on other sites More sharing options...
toha Posted September 29, 2022 Author Share Posted September 29, 2022 8 hours ago, argumentum said: so, what do you wanna do ? thank you. i forget about Ubound() second parameter 😃 fortran and basic was in my life 20+ yrs ago. arr.length more usual for me ) thx. Link to comment Share on other sites More sharing options...
toha Posted September 29, 2022 Author Share Posted September 29, 2022 is that possible in Autoit to pass array from multi dimensional array? local $arr[20][20][2] = [[[1,2],[3,4]]] wtf($arr[0]) ; ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.: local $hmm = [[1,2],[3,4]] wtf($hmm) ; working well but $hmm and $arr[0] suppose to be the same func wtf($ar) EndFunc Link to comment Share on other sites More sharing options...
argumentum Posted September 29, 2022 Share Posted September 29, 2022 (edited) no, but then again, what for. Depending on the language you're coding in you're gonna have liberties and limitations as far as the concepts incorporated in the language. So "think AutoIt", because if you "think Fortran", you're gonna have a hard time figuring out what's wrong with your AutoIt code. PS: I like you avatar Edited September 29, 2022 by argumentum dyslexia =) Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting. Link to comment Share on other sites More sharing options...
abberration Posted September 29, 2022 Share Posted September 29, 2022 (edited) Actually, you are passing a multi-dimensional array to the function. One of your problems is in one call of the wtf function, you are passing a 3d array and the next, you are passing a 2d array. To fix the problem of one function reading arrays with different amount of dimensions, I added a 2nd parameter for how many dimensions. Without something like this, you will always get an error that the array is out of bounds. In both examples, I am reading the same array position with a msgbox, but from different arrays. The arrays are referenced in order of z,y,x axis. In the 2d array, there is no z, so only y and x are used. You can play with the numbers to get a better idea. Normally, under a 1d or 2d array, I use _arraydisplay for examples, but it does not display 3d arrays. I have wanted to create something to display 3d arrays for a while now, but I haven't had the time to do so. Maybe some day. #include <Array.au3> Example() Func Example() Local $arr[20][20][2] = [[[12, 0], [2, 0], [7, "3d pos 0,2,1"], [8, 0], [9, 0], [5, 1], [10, 5], [9, 6], [8, 7], [7, 8], [6, 9], [6, 10], [7, 10], [8, 10], [9, 10], [10, 10], [11, 10]]] Local $hmm[20][2] = [[12, 0], [2, 0], [7, "2d pos 2,1"], [8, 0], [9, 0], [5, 1], [10, 5], [9, 6], [8, 7], [7, 8], [6, 9], [6, 10], [7, 10], [8, 10], [9, 10], [10, 10], [11, 10]] wtf($arr, 3) ; passes $arr to function wtf($hmm, 2) ; passes $hmm to function EndFunc Func wtf(ByRef $ar, $numDim) If $numDim = 3 Then MsgBox(0, "", $ar[0][2][1]) ; msgbox reads 3d array ElseIf $numDim = 2 Then MsgBox(0, "", $ar[2][1]) ; msgbox reads 2d array EndIf EndFunc ;==>wtf Edited September 29, 2022 by abberration changed global arrays to locals and put into example function Easy MP3 | Software Installer | Password Manager Link to comment Share on other sites More sharing options...
abberration Posted September 29, 2022 Share Posted September 29, 2022 Improved: don't need to specify how many dimensions: #include <Array.au3> Example() Func Example() Local $arr[20][20][2] = [[[12, 0], [2, 0], [7, "3d pos 0,2,1"], [8, 0], [9, 0], [5, 1], [10, 5], [9, 6], [8, 7], [7, 8], [6, 9], [6, 10], [7, 10], [8, 10], [9, 10], [10, 10], [11, 10]]] Local $hmm[20][2] = [[12, 0], [2, 0], [7, "2d pos 2,1"], [8, 0], [9, 0], [5, 1], [10, 5], [9, 6], [8, 7], [7, 8], [6, 9], [6, 10], [7, 10], [8, 10], [9, 10], [10, 10], [11, 10]] wtf($arr) ; passes $arr to function wtf($hmm) ; passes $hmm to function EndFunc Func wtf(ByRef $ar) If UBound($ar,0) = 3 Then MsgBox(0, "", $ar[0][2][1]) ; msgbox reads 3d array ElseIf UBound($ar,0) = 2 Then MsgBox(0, "", $ar[2][1]) ; msgbox reads 2d array EndIf EndFunc ;==>wtf Easy MP3 | Software Installer | Password Manager 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