Digisoul Posted January 21, 2014 Posted January 21, 2014 Hello, I wrote a script where I was using empty Arrays like below: Func SomeFunc() Local $Array[] ;do something with array EndFunc and the script was working perfectly, but now AutoIt is giving error: >Running AU3Check (3.3.11.2) from:C:\Program Files (x86)\AutoIt3 +>21:05:40 AU3Check ended.rc:0 >Running:(3.3.11.2):C:\Program Files (x86)\AutoIt3\autoit3.exe "C:\Users\Digi\Desktop\test.au3" --> Press Ctrl+Alt+F5 to Restart or Ctrl+Break to Stop "C:\Users\Digi\Desktop\test.au3" (7) : ==> Variable subscript badly formatted.: Global $aTable[] Global $aTable[^ ERROR ->21:05:40 AutoIt3.exe ended.rc:1 >Exit code: 1 Time: 0.310 I want to confirm that, Empty Arrays are removed from new AutoIt version ? 73 108 111 118 101 65 117 116 111 105 116
Moderators Melba23 Posted January 21, 2014 Moderators Posted January 21, 2014 Digisoul,No AutoIt still has empty arrays, but if you do not assign values to the array when you create it you need to explicitly define the size of the dimensions:#include <Array.au3> #include <MsgBoxConstants.au3> #include <AutoItConstants.au3> Global $aArray[]= [1] ; Implicit sizing MsgBox($MB_SYSTEMMODAL, "Size", "Array has " & UBound($aArray, $UBOUND_ROWS) & " items") _ArrayDelete($aArray, 0) MsgBox($MB_SYSTEMMODAL, "Size", "Array has " & UBound($aArray, $UBOUND_ROWS) & " items") _ArrayAdd($aArray, 1) MsgBox($MB_SYSTEMMODAL, "Size", "Array has " & UBound($aArray, $UBOUND_ROWS) & " items") Global $aArray[0] ; Explicit sizing MsgBox($MB_SYSTEMMODAL, "Size", "Array has " & UBound($aArray, $UBOUND_ROWS) & " items")All clear? M23 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 columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
water Posted January 21, 2014 Posted January 21, 2014 This still works Global $aArray[0] ConsoleWrite(UBound($aArray, 1) & @LF) My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki
Digisoul Posted January 21, 2014 Author Posted January 21, 2014 Digisoul, No AutoIt still has empty arrays, but if you do not assign values to the array when you create it you need to explicitly define the size of the dimensions: #include <Array.au3> #include <MsgBoxConstants.au3> #include <AutoItConstants.au3> Global $aArray[]= [1] ; Implicit sizing MsgBox($MB_SYSTEMMODAL, "Size", "Array has " & UBound($aArray, $UBOUND_ROWS) & " items") _ArrayDelete($aArray, 0) MsgBox($MB_SYSTEMMODAL, "Size", "Array has " & UBound($aArray, $UBOUND_ROWS) & " items") _ArrayAdd($aArray, 1) MsgBox($MB_SYSTEMMODAL, "Size", "Array has " & UBound($aArray, $UBOUND_ROWS) & " items") Global $aArray[0] ; Explicit sizing MsgBox($MB_SYSTEMMODAL, "Size", "Array has " & UBound($aArray, $UBOUND_ROWS) & " items") All clear? M23 This still works Global $aArray[0] ConsoleWrite(UBound($aArray, 1) & @LF) Thanks for your reply, I am not exactly sure but I remember that in one of the beta I was able to operate like: Global $array[] For $x = 0 to 99 $array[$x] = $x Next But I got the correct syntax and operation of array. 73 108 111 118 101 65 117 116 111 105 116
Moderators Melba23 Posted January 21, 2014 Moderators Posted January 21, 2014 Digisoul,That was an undocumented feature that was tested in some of the Beta releases but has since been removed. It might or might not return in the future but for now it is not valid and the correct syntax is as I showed above. M23 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 columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
FaridAgl Posted January 21, 2014 Posted January 21, 2014 (edited) What about this one: Global $aArray = [] ConsoleWrite(VarGetType($aArray) & @CRLF) ;Array ConsoleWrite(UBound($aArray) & @CRLF) ;1 You can access the first (and the last) offset like this: ConsoleWrite($aArray[0] & @CRLF) And remember this is not valid: Global $aArray[0] ConsoleWrite(VarGetType($aArray) & @CRLF) ;Array ConsoleWrite(UBound($aArray) & @CRLF) ;0 ConsoleWrite($aArray[0] & @CRLF) ;Error Because an array length should logically be at least 1, as an zero length array makes no sense. It's look like you create a variable which you can't access it. So an array with the minimum length (1) is just like a normal variable. That's because of the memory stuff. In a programming language with multiple datatypes, each datatype has its own length, for example an int variable in c++ is 4 byte length. When you create an int array like Array[2], you are saying you want 2 * (sizeof(datatype)) bytes to be allocated to the created array. If the start address of the allocation in the memory be 100 (For example), when you say Array[0], you are saying 100 + (0 * sizeof(datatype)) which is equal to 100, and when you say Array[1] it should be 104 as the datatype is int in this example. Now think logically, what does an array with a length of 0 could mean? Edited January 21, 2014 by D4RKON3 http://faridaghili.ir
jaberwacky Posted January 21, 2014 Posted January 21, 2014 It looks to me like you've still indicated that address 100 should still be something. Ambiguous, could be anything of any size until at such point you've indicated to set aside some amount of memory starting at 100. Helpful Posts and Websites: AutoIt Wiki | Can't find what you're looking for on the Forum? My scripts: Guiscape | Baroque AU3 Code Formatter | MouseHoverCalltips | SciTe Customization GUI | ActiveWindowTrack Toy | Monitor Configuration UDF
FaridAgl Posted January 21, 2014 Posted January 21, 2014 I didn't get what you are trying to say, but I'm saying $Array[0] doesn't make any sense. http://faridaghili.ir
Moderators Melba23 Posted January 21, 2014 Moderators Posted January 21, 2014 D4RKON3,If I remember correctly it was introduced last summer - I amended the Array.au3 library so that it worked with empty arrays. There had been many discussions about whether AutoIt should allow such a thing - search around the forum to find the discussions - usually ended abruptly by the same person. One of the major advantages to my eyes is that you can do what I did in the example code above - use ArrayAdd/Delete and not have to worry whether there are actually any elements in the array. Before empty arrays existed, removing the final element destroyed the array - then adding another item meant checking if the variable was an array and redeclaring it if it was not. So I do not agree that empty arrays make no sense. M23 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 columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
water Posted January 21, 2014 Posted January 21, 2014 There are some UDFs out there that query data sources (AD, Excel ...) if the query string doesn't find any data it is sensible to return an empty array to the calling script. My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki
FaridAgl Posted January 21, 2014 Posted January 21, 2014 So, is it just another of the AutoIt's magics which shows up from the AutoIt's mystery box or it's also available on major programming languages like C++, Java or C#? If yes, then I'm sorry because I never heard about it. http://faridaghili.ir
Moderators Melba23 Posted January 21, 2014 Moderators Posted January 21, 2014 D4RKON3,I seem to remember from those previously mentioned discussions that some other languages do indeed have this functionality. They were good reads - it is worth searching for them. M23 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 columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
jchd Posted January 21, 2014 Posted January 21, 2014 Many languages allow for empty arrays, even if sometimes under a crude form. There is nothing shocking about an empty container. The empty set is crucial in set theory - and in mathematics in general. A linked list or a list can obviously be empty. An array is just another arrangement of things. This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)
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