Jump to content

Interesting Array Warnings


Recommended Posts

#include <File.au3>

Local $String, $Array, $Max

$String = FileReadLine(@ScriptDir & "\Data.txt", 1)
$Array = StringSplit($String, ".")
$Max = UBound($Array)

For $i = 1 To $Max Step +1
    MsgBox(0, "", $Array[$i])
Next

So i spotted this in the console

C:\Users\Scott\Documents\AutoIt\Arrays\Hmm.au3 (10) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
MsgBox(0, "", $Array[$i])
MsgBox(0, "", ^ ERROR

Obviously it's not the end of the world, the script still runs fine, just curious about this.

Link to comment
Share on other sites

  • Moderators

Finalversion,

Ah, this old chestnut again! :huggles:

Arrays in AutoIt start at element [0], so a 5 element array has [0], [1], [2], [3], [4]

UBound, on the other hand, gives you the total number of elements, a 5 element array will return 5.

Can you see where this is going yet? :D

You have set your For...Next loop as 1 To $Max - when it should be 0 To $Max - 1.

I know your first reaction will be: "Why the hell does UBound return 5!" - you are not alone! However, you are warned - from the Help file for UBound: "Remember that the value returned by UBound is one greater than the index of an array's last element!". Personally I would have called UBound something else, like NumElements, but then I did not write it. If it is any consolation, I still have to think very carefully about the upper and lower limits of array elements and often get my For...Next counter wrong on the first pass. :D

You might find this topic of interest if you want to see a bit more confusion...... :

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see 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

 

Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...