Brobbl Posted April 26, 2013 Posted April 26, 2013 I am planning on rewriting one of my tools from using ini-files to using a database, and I want to add some features. I searched this and other forums about my following questions and read the help file, but I just found out what wouldn't work, not what I could do to get my problem solved =( So, I can add an array[2] into the "slots" of another array[n]: for $i = 0 to 4 array1[$i] = array2 next ...but I can't access the stored arrays directly. How can I get this solved? I always have different amounts of "array2"s and want to get a 2D array storing the number of elements in [0][0]. Thanks in advance, just post me some hints and I think I can figure this out myself...
Moderators Melba23 Posted April 26, 2013 Moderators Posted April 26, 2013 Brobbl,As you have found out, storing arrays in another array is perfectly possible but not that practical if you need quick access to their content. Could you let us see some examples of exactly what sort of data and format you have for your array2 and what you are trying to achieve in the 2D array you mention (such as how the array2 data fits into it). It is always easier to suggest possible solutions with some concrete data to work on. 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 April 26, 2013 Posted April 26, 2013 Array in Array is possible but not recommended. You can't access an element of an array in an array directly. You could use _ArrayToString for $Array2 (use a sensible delimiter) and then store this string in $Array1. If needed create an array again using StringSplit. 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
Brobbl Posted April 26, 2013 Author Posted April 26, 2013 (edited) Could you let us see some examples of exactly what sort of data and format you have for your array2 and what you are trying to achieve in the 2D array you mention (such as how the array2 data fits into it). It is always easier to suggest possible solutions with some concrete data to work on. I would share code if I had some, but I am planning how to solve my problem right now and didnt write any code yet. Right now I only have my database and I am querying the dependencies and the mode (install/uninstall). Select db.dependency, db.mode From db Where db.paket = 'test' Since a package can have multiple dependencies, I want to store them in an array and work through it afterwards. The data type is always string. EDIT: I have to mention, I'm using this sql funktion: Func _SQLQuery($oConn, $sQuery) If IsObj($oConn) Then Return $oConn.Execute($sQuery) Return SetError(1, 0, 0) EndFunc ;==>_SQLQuery Obviously it returns an object, which I write into a string which is split into an "array2" afterwards. While Not $result.EOF $string=$string & $result.Fields("collumn").value & "|" $result.MoveNext Wend array = stringsplit(string, "|", 1) Perhaps there are better solutions but I don't know them. Array in Array is possible but not recommended. You can't access an element of an array in an array directly. You could use _ArrayToString for $Array2 (use a sensible delimiter) and then store this string in $Array1. If needed create an array again using StringSplit. Thank you water, I'll have a look into this. Edited April 26, 2013 by Brobbl
trancexx Posted April 26, 2013 Posted April 26, 2013 (edited) It's not true that array in array is not recommended. Who ever said that originally didn't know what he was talking about. The problem Brobbi shows is problem with unimplemented basic feature. Beta versions of AutoIt allow direct access by using parentheses, like this: Local $aInner[2] = ["Elem1", 2] Local $aOuter[2] = ["Q", $aInner] $sElem = ($aOuter[1])[0] ; this is string "Elem1" ;... Edited April 26, 2013 by trancexx ♡♡♡ . eMyvnE
Brobbl Posted April 26, 2013 Author Posted April 26, 2013 (edited) It's not true that array in array is not recommended. Who ever said that originally didn't know what he was talking about. The problem Brobbi shows is problem with unimplemented basic feature. Beta versions of AutoIt allow direct access by using parentheses, like this: Local $aInner[2] = ["Elem1", 2] Local $aOuter[2] = ["Q", $aInner] $sElem = ($aOuter[1])[0] ; this is string "Elem1" ;... Yeah, that's what I was looking for, but it won't work.... which is okay for me, I just need a workaround Edited April 26, 2013 by Brobbl
trancexx Posted April 26, 2013 Posted April 26, 2013 (edited) ^^ workaround is obvious. Just think for a second. Edited April 26, 2013 by trancexx ♡♡♡ . eMyvnE
JohnOne Posted April 26, 2013 Posted April 26, 2013 That syntax is a great addition/improvement to AutoIt, I hope it makes it into release version. AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans.
Brobbl Posted April 26, 2013 Author Posted April 26, 2013 ^^ workaround is obvious. Just think for a second.huh. I don't see it. Any hints?
JohnOne Posted April 26, 2013 Posted April 26, 2013 $temparray = $arayofarray[x] AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans.
Brobbl Posted April 26, 2013 Author Posted April 26, 2013 (edited) $temparray = $arayofarray[x] Would this work? I mean, if I have an array of arrays and put it into another variable, its still an array of arrays and I cant access the values in it, right? EDIT: The problem is that i never really got into work with 2D arrays very much, I used some INI funktion which returned 2D arrays, but this is the first time i'm trying to create one myself. Edited April 26, 2013 by Brobbl
Brobbl Posted April 26, 2013 Author Posted April 26, 2013 (edited) I think i got it... untested, but I think tested, did some changes and it's okay:_arraydisplay(_GetReq("testpackage")) Exit Func _GetReq($Package) $SQL = _SQLConnect($SQL_servername,$SQL_serverdomain,$SQL_authmode,$SQL_username,$SQL_userpass) $query = "Select db.dependency, db.mode From dbWhere db.paket = '" & $Package & "'" $result = _SQLQuery($SQL,$query) $dependencies = "" While Not $result.EOF $dependencies=$dependencies & $result.Fields("dependency").value & "|" & $result.Fields("mode").value & "||" $result.MoveNext Wend $dependencies = StringLeft($dependencies, StringLen($dependencies) - 2) $temparray1 = StringSplit($dependencies, "||", 1) Dim $returnarray[$temparray1[0] + 1][2] $returnarray[0][0] = $temparray1[0] For $count = 1 To $temparray1[0] $temparray2 = StringSplit($temparray1[$count], "|", 3) $returnarray[$count][0] = $temparray2[0] $returnarray[$count][1] = $temparray2[1] Next _SQLDisconnect($SQL) Return $returnarray EndFuncNow I'm looking in what to do if there are no dependecies returned from the database, but I think this is easy =)Thank you all! Edited April 29, 2013 by Brobbl
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