Jump to content

Question regarding Arrays


Recommended Posts

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...

Link to comment
Share on other sites

  • Moderators

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

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

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 2022-02-19 - Version 1.6.1.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 (NEW 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

 

Link to comment
Share on other sites

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 by Brobbl
Link to comment
Share on other sites

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 by trancexx

♡♡♡

.

eMyvnE

Link to comment
Share on other sites

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 by Brobbl
Link to comment
Share on other sites

$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 by Brobbl
Link to comment
Share on other sites

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
EndFunc

Now 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 by Brobbl
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...