3 Dimensionales Array Anzeigen lassen

  • Hallo,

    Gibt es irgendeine möglichkeit sich per Befehl wie _arraydisplay auch ein 3 Dimensionales Array anzeigen zu lassen?
    Ich würde gerne wissen was in meinem Array alles drin steht und ob es sich richtig füllt und ich nicht doch irgendeinen Fehler in der Schleife gemacht habe.

    Gruß
    Blacky911

    Kleiner AutoIt Lehrling :)

    Einmal editiert, zuletzt von blackdeath911 (21. Februar 2012 um 20:05)

  • Okay es hat sich falsch gefüllt....

    Noch eine Frage eventuell begreife ich dann wie ich die schleifen aufbauen muss

    Ich habe 6 Kategorien und 69 Programme
    Mein Array soll also zu einem Programm die Kategorie den Namen und die Beschreibung haben.

    Wie gebe ich dies jetzt in das Array rein?

    Hier das was ich bis jetzt habe:
    $sektionen[0] sind die Anzahl der Kategorien
    $anzahl=Anzahl der ganzen programme

    [autoit]

    Global $programme[$sektionen[0]][$anzahl][$anzahl]

    [/autoit][autoit][/autoit][autoit]

    ;_ArrayMultiDisplay($programme, '3D Array Display')
    For $i=0 to $sektionen[0]-1
    $var=IniReadSection("programme.ini",$sektionen[$i+1])

    [/autoit][autoit][/autoit][autoit]

    For $a=0 to $var[0][0]-1
    $programme[$i][$a][0]=$var[$a+1][0]
    $programme[$i][0][$a]=$var[0][$a+1]
    ;MsgBox(0,0,$programme[$i][$a][0] & " " & $programme[$i][0][$a])
    Next
    $var=0
    Next

    [/autoit]

    Wo aber folgender Fehler kommt: C:\Projekt Autoinstallation\aktuell\GUI4.2.0.1.au3 (30) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:

    Habe ich schon ein Fehler bei der bestimmung des Arrays gemacht?
    Edit: Brauche ich dafür überhaupt ein 3D Array? Wenn nein wie mache ich es mit einem 2D Array?

    Gruß Blacky911

    Kleiner AutoIt Lehrling :)

    Einmal editiert, zuletzt von blackdeath911 (21. Februar 2012 um 19:44)

  • Dann brauchst du aber nur ein 2d-Array:D
    also zum Beispiel

    [autoit]

    #include <Array.au3>
    Dim $aArray[2][3] = [["Porgramm1","Kategorie1","Beschreibung1"],["Porgramm2","Kategorie2","Beschreibung2"]]
    _ArrayDisplay($aArray)

    [/autoit]

    Dann wird das mit dem Befüllen auch einfacher:D
    Ich hab in meiner ganzen Leben noch nie ein 3D-Array benützt:D:D

    EDIT: Du könntest ja noch den Aufbau der .ini zeigen...

  • Du hast recht...

    Hatte irgendwie grade nen Denkfehler gehabt und gedacht wenn ich 3 Attribute habe brauche ich auch ein 3D array ^^ Aber man brauch ja nur X Anzahl der Programme und dann ne 3 für die 3 verschiedenen sachen (name kategorie beschreibung)

    Hier mal der Aufbau der ini:

    Spoiler anzeigen

    [system]
    7zip=Keine Informationen verfügbar.
    DivX=Keine Informationen verfügbar.
    Everest Ultimate=Keine Informationen verfügbar.
    Flash Player=Keine Informationen verfügbar.
    Folder Size=Keine Informationen verfügbar.
    Irfanview=Keine Informationen verfügbar.
    Java Sun=Keine Informationen verfügbar.
    Minianwendungen=Keine Informationen verfügbar.
    NetSpeedMonitor=Keine Informationen verfügbar.
    Notepad++=Keine Informationen verfügbar.
    Shockwave Player=Keine Informationen verfügbar.
    TeraCopy=Keine Informationen verfügbar.
    Total Commander=Keine Informationen verfügbar.
    Truecrypt=Keine Informationen verfügbar.

    [media]
    Camtasia Studio=Keine Informationen verfügbar.
    C.C. Codec Pack=Keine Informationen verfügbar.
    Cyberlink PowerDVD=Keine Informationen verfügbar.
    Dexpot=Keine Informationen verfügbar.
    iTunes + Quicktime=Keine Informationen verfügbar.
    K-Lite Codec Pack=Keine Informationen verfügbar.
    Mbase 2=Keine Informationen verfügbar.
    MPC Mediaplayer=Keine Informationen verfügbar.
    MPC Home Cinema=Keine Informationen verfügbar.
    SnagIt=Keine Informationen verfügbar.
    VLC Mediaplayer=Keine Informationen verfügbar.

    [internet]
    Filezilla=Keine Informationen verfügbar.
    Firefox=Keine Informationen verfügbar.
    FlashFXP=Keine Informationen verfügbar.
    ICQ 7=Keine Informationen verfügbar.
    Iron=Keine Informationen verfügbar.
    JDownloader=Keine Informationen verfügbar.
    mIRC=Keine Informationen verfügbar.
    Opera=Keine Informationen verfügbar.
    Pidgin=Keine Informationen verfügbar.
    PuTTy=Keine Informationen verfügbar.
    QIP=Keine Informationen verfügbar.
    Royal TS=Keine Informationen verfügbar.
    RS Accountmanager=Keine Informationen verfügbar.
    Skype=Keine Informationen verfügbar.
    Teamspeak 3=Keine Informationen verfügbar.
    TeamViewer=Keine Informationen verfügbar.
    Thunderbirt=Keine Informationen verfügbar.
    WinSCP=Keine Informationen verfügbar.

    [anti]
    Avast Antivirus=Keine Informationen verfügbar.
    Avira Antivir=Keine Informationen verfügbar.
    Spybot=Keine Informationen verfügbar.

    [brenn]
    Ashampoo Burningstudio=Keine Informationen verfügbar.
    DVD Shrink=Keine Informationen verfügbar.
    UltraISO=Keine Informationen verfügbar.
    Virtual Clonedrive=Keine Informationen verfügbar.

    [grafik]
    Adobe Reader=Keine Informationen verfügbar.
    Foxit Phantom=Keine Informationen verfügbar.
    Gimp=Keine Informationen verfügbar.

    Wie man sieht sind die Sektionen die Kategorien und dann Name+Beschreibung (welche noch Fehlen)

    Kleiner AutoIt Lehrling :)

  • Ach komm was solls, mir is grad langweilig....

    [autoit]

    #include <Array.au3>

    [/autoit][autoit][/autoit][autoit]

    $sINIFILE = ""

    [/autoit][autoit][/autoit][autoit]

    $aArray = _GetProgsFromIni($sINIFILE)
    _ArrayDisplay($aArray)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func _GetProgsFromIni($sIniPath)
    Dim $aResult[1000][3], $aSectionNames
    $aSectionNames = IniReadSectionNames($sIniPath)
    Local $iCounter = 0
    For $iI = 1 To $aSectionNames[0] Step 1
    $aSectionItems = IniReadSection($sIniPath, $aSectionNames[$iI])
    For $iJ = 1 To $aSectionItems[0][0] Step 1
    $iCounter += 1
    $aResult[$iCounter][0] = $aSectionItems[$iJ][0]
    $aResult[$iCounter][1] = $aSectionNames[$iI]
    $aResult[$iCounter][2] = $aSectionItems[$iJ][1]
    Next
    Next
    ReDim $aResult[$iCounter+1][3]
    $aResult[0][0] = $iCounter
    Return $aResult
    EndFunc

    [/autoit]

    Kannst ja abändern wie du willst... Nur, dass du irgendwie ne Idee bekommst, wie man sowas lösen könnte

    Vielleicht noch einige Bemerkungen:
    - IniReadSection() gibt nur die die keys aus, wenn der korrekte Sectionname angegeben ist, d.h. man weiß entweder die Sectionnames oder man holt sie sich mit IniReadSectionNames()
    - IniReadSection() gibt ein 2D-Array zurück mit Key/Value Paaren
    - Es wird dann einfach Section für Section, Key für Key durchgegangen und das $aResult Array gefüllt

    Zitat

    You just keep on trying 'till you run out of cake. ;)


    [STEAM] Source UDF

    3 Mal editiert, zuletzt von K4z (21. Februar 2012 um 21:11)

  • Ich habe es denke ich einfacher gelöst:

    [autoit]

    ;----------------------------------------------------
    ;------Kategorieanzahl festmachen anhand der ini-----
    ;----------------------------------------------------
    $sektionen=IniReadSectionNames("programme.ini")
    Global $anzahl=0
    for $i=1 to $sektionen[0]
    $var=IniReadSection("programme.ini",$sektionen[$i])
    $anzahl=$var[0][0]+$anzahl ;$anzahl wird die anzahl der Gesamten Programme
    $var=0
    Next

    [/autoit][autoit][/autoit][autoit]

    ;----------------------------------------------------
    ;----Befüllen des Arrays mit allen Informationen-----
    ;----------------------------------------------------
    ;-------x 0 = Kategorie------------------------------
    ;-------x 1 = Name-----------------------------------
    ;-------x 2 = Beschreibung---------------------------
    ;----------------------------------------------------
    Global $programme[$anzahl][3]

    [/autoit][autoit][/autoit][autoit]

    $x=0
    For $i=0 to $sektionen[0]-1
    $var=IniReadSection("programme.ini",$sektionen[$i+1])
    For $a=1 to $var[0][0]
    $programme[$x][0]=$sektionen[$i+1]
    $programme[$x][1]=$var[$a][0]
    $programme[$x][2]=$var[$a][1]
    $x=$x+1
    Next
    $var=0
    Next

    [/autoit]

    So habe ich auch kein übergroßes array ;)

    Oder ist dort irgendwo wieder ein fehler der mir nachher das genick brechen wird? 8|

    Gruß Blacky911

    Kleiner AutoIt Lehrling :)

  • ohne es jetzt ausprobiert zu haben:

    Zitat

    For $i=0 to $sektionen[0]-1


    Sollte For $i=1 to $sektionen[0] heißen, da das zurückgegebene Array so aufgebaut ist, dass in [0] die Anzahl der Sektionen und ab 1 die Sektionen drin stehn.
    Aber eigentlich macht dein Programm ja nichts anderes als meins, nur dass eine Schleife praktisch doppelt durchgegangen wird. Ich wollts halt möglichst schnell haben. Das mit der Dimensierung vom Array war bissle übertrieben:D:D, so erspart man sich aber deine erste Schleife. Nacher wird das Array ja wieder neu dimensioniert, d.h. es macht eigentlich nicht viel aus, wie groß man am Angang das Array wählt. Das bissle Arbeitsspeicher, was da für kurze Zeit mehr benützt wird ist wirklich egal, solang mans nicht übertreibt.

    Edit: ah habs jetzt gesehn dass du wieder [$i+1] verwendest, daher eigentlich kein Ding, aber umständlicher:D

    Zitat

    You just keep on trying 'till you run out of cake. ;)


    [STEAM] Source UDF

    2 Mal editiert, zuletzt von K4z (21. Februar 2012 um 21:19)

  • Man kann beides machen... Ich habe mir den Umstand gemacht überall wo ich $i gebrauche dann noch -1 zu rechnen in der schleife... hast recht... geht aber beides ;) Edit: hasts selber bemerkt ^^

    Zum Array befüllen hast du recht, es gehen beide möglichkeiten wobei ich mir nicht sicher bin welche jetzt die bessere ist... sehe die vor und nachteile beider nicht wirklich ?(

    Gruß Blacky

    Kleiner AutoIt Lehrling :)

  • Wir machen beim Befüllen beide das selbe, das einzige was du noch zusätzlich machst, ist vorher die Größe, die das Array am Schluss hat, zu bestimmen und ich eben eine Größe vorgeb und später erst die tatsächliche Größe definier...

  • Aber somit habe ich mein Altes Script schonmal um 300 Zeilen verkürzt und um sagen wir 60% Variabler auf neue Programme etc. gemacht
    Nun fehlen nurnoch die ganzen Abfragen etc. die jetzt auch wesentlich leichter sind mit 1 Array anstatt für jede gruppe ein eigenes.

    Wenn ich wieder Probleme habe melde ich mich :)
    Bis dahin bin ich erstmal sorglos ^^

    MFG: Blacky911

    Kleiner AutoIt Lehrling :)