Jump to content
RyukShini

Array variable has incorrect number of subscripts

Recommended Posts

Local $okay
_FileReadToArray("Okay.txt", $okay) ; read the list of names to array
For $i = 1 To UBound($okay) - 1
$Read = $okay[$i]

If I run this and it goes to the end of Okay.txt it returns an error.
"Array variable has incorrect number of subscripts or subscript dimension range exceeded.:"
so can I either exitloop if its run through the file or add some error checking that exitloop if array = empty?
Thanks in advance.

Edited by RyukShini

Share this post


Link to post
Share on other sites

You should add a line to visualize your data to make sure it contains what you think it should.  Otherwise, using ubound($array)-1 should make the loop run the correct number of times.  Try this and look at the array, does it appear as you would expect it? 

Local $usrpwd
_FileReadToArray("Okay.txt", $okay) ; read the list of names to array
_arrayDisplay($okay); visualize data
For $i = 1 To UBound($okay) - 1
$Read = $okay[$i]

I tested this version which is almost the exact same as yours.  The file contained three lines of data.  I added debugging to error check the array creation and visualize it.  It works fine.  Maybe you could post your whole code?

#include <Array.au3>
#include <File.au3>
global $okay
Local $usrpwd
$result=_FileReadToArray(@ScriptDir&"\tesfile.txt", $okay)
ConsoleWrite($result&" error: "&@error&@crlf)
_arrayDisplay($okay); visualize data
For $i = 1 To UBound($okay) - 1
$Read = $okay[$i]
ConsoleWrite($Read)
Next

 

Edited by Jfish

Share this post


Link to post
Share on other sites
6 minutes ago, Jfish said:

You should add a line to visualize your data to make sure it contains what you think it should.  Otherwise, using ubound($array)-1 should make the loop run the correct number of times.  Try this and look at the array, does it appear as you would expect it? 

Also, note the difference in starting the loop at 0 vs 1.

Local $okay
_FileReadToArray("Okay.txt", $okay) ; read the list of names to array
_arrayDisplay($okay); visualize data
For $i = 1 To UBound($okay) - 1
$Read = $okay[$i]

 

It seems to be correct?
65972e210676f85cfedd61674f5f7514.png

 

 

Share this post


Link to post
Share on other sites
6 minutes ago, Jfish said:

Yes, try running my code where I put the results to the console in the four loop.  You should see all four items from 1-4 in the console window of Scite.

Your code works, but I actually just found out why mine wasn't working.
I needed a Continueloop in my code inside an IF statement.
Now it works as intended and it continues the loop/stops correctly.
Thanks a lot for the help ;)
 

Share this post


Link to post
Share on other sites
7 minutes ago, Jfish said:

Ah, okay glad it is working but next time please include a full reproducer.  That IF statement would have been good info ...

Alright sorry about that. ;)

Share this post


Link to post
Share on other sites
2 minutes ago, Bucione said:

If you dont specify any flags to _FileReadToArray(), it will store the array count on index 0 by default.

For $i = 1 to $okay[0]
    $Read = $okay[$i]
Next

 

Alright thank you for making that clear.

Share this post


Link to post
Share on other sites
On 26/10/2016 at 7:01 AM, RyukShini said:

Your code works, but I actually just found out why mine wasn't working.
I needed a Continueloop in my code inside an IF statement.
Now it works as intended and it continues the loop/stops correctly.
Thanks a lot for the help ;)
 

 

it would have been nice if you post your codes that work

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

  • Similar Content

    • By sksbir
      Hi
      Trying this from autoit v3.3.14.5 and SCITE 3.19.102.1901.0 :
      help file , page "Language Reference - Variables" , sample autoit script about maps:

      Maps must be declared before use by defining their scope using the 'Global/Local/Static' keywords. Local $mControls[]
      So is my test script : only with this local declation.
      -check syntax is OK
      - running script : 

      test.au3" (13) : ==> Variable subscript badly formatted.: Local $mControls[] Local $mControls[^ ERROR ->14:51:49 AutoIt3.exe ended.rc:1
      any clue ?
    • By mlazovjp
      I am going through the AutoIt Wiki and soaking up a lot of great information.  On the “Best Coding Practices” page at https://www.autoitscript.com/wiki/Best_coding_practices#Scopes_of_Variables there seems to be a minor detail missing.  In the “Variable Initialization” section at https://www.autoitscript.com/wiki/Best_coding_practices#Variable_Initialization , there are references to a data type $o, but in the table listing prefixes and their data types, there does not appear to be a prefix “o”.  I assume that this is for Object?
    • By Blitzkid
      Hello, i want to search several directories for files with the largest numbers behind them (Like "video123") . They dont have a datatype. But there are also files with longer names and datatypes in these folders (Like "video778.mp4"). Is it possible to filter the _FileListToArray Syntax from
      to smth. like
       
      Here is my Code
      #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <array.au3> #include <File.au3> $filedir = @ScriptDir & "\" _checkfile() Func _checkfile() ConsoleWrite("______________________" & @CRLF) Local $arr[3] = ["music", "picture", "video"] For $i = 0 To UBound($arr) - 1 Local $arrayfiles = _FileListToArray($filedir & $arr[$i], $arr[$i] & "*", 1) If @error = 1 Then ConsoleWrite($arr[$i] & "Error 1") EndIf If @error = 4 Then ConsoleWrite($arr[$i] & "Error 2") ;Exit EndIf $arrayfilter = _ArrayMax($arrayfiles, 0, 1) Global $stringfiles = StringReplace($arrayfilter, $arr[$i], "") ConsoleWrite($arrayfilter & @CRLF) Next EndFunc ;==>_checkfile  
    • By jmp
      Script running good but error in line 7.
      When i run this script :
      #include <IE.au3> #include <Array.au3> $oIE = _IEAttach ("Shop") $oTable = _IETableGetCollection ($oIE, 1) $aTableData = _IETableWriteToArray ($oTable) For $inumber = 1 To UBound($aTableData) -1 $table = $aTableData[4][$inumber] MsgBox(0, "", $table) Next I got Error: array variable has incorrect number of subscripts or subscript dimension range exceeded
    • By nacerbaaziz
      Good morning guys, i hope that you're all well.
      guys, i have a problem and i hope that you can help me
      i've created an 3d array
      the array Contain a Categories info
      as folow
      $array[n][0][0] = Categorie name
      $array[n][0][1] = Categorie file path
      $array[n][0][2] = Categorie contents number
      $array[n][m][0] = link name
      $array[n][m][1] = link url
      $array[n][m][2] = link section name
      in my tool i want to add an option to delete a Category
      as you know the Categorie mean that must delete a region from the array
      when i tried to use _arrayDelete
      with the 2d array it work well
      but here i couldn't find any way to do that, can any one help me please?
      thanks in advance.
×
×
  • Create New...