Problem mit _GUICtrlListView_GetItemTextArray in Array schreiben

  • Hey Community

    Entschuldigt den Titel, aber mir kein besser eingefallen.

    Kurz und knapp. Mein Problem liegt bei _GUICtrlListView_GetItemTextArray. Mein Programm durchläuft verschiedene Ebenen and Schritten (logisch^^). Diesen Ebenen will ich Nummern zuweisen. 1,2,3 .....n. In jeder Ebene des Programmablaufs wird etwas aus einem ListView eingelesen und mit verschiedenen Möglichkeiten abgegelichen. Die Anzahl der Ebenen wird dabei allerdings erst durch den Nutzer selber festgelegt. Von daher kein Fixwert möglich, da nach obenhin bis zum maximum offen sein soll. $iLayer wird mit jeder weiteren Ebene +1 hochgezählt.

    Zuerst hatte ich es so versucht:

    [autoit]

    $Array[$iLayer] = _GUICtrlListView_GetItemTextArray($hWnd,$i)

    [/autoit]

    . Allerdings ist dies verbunden mit einer Fehlermeldung.

    Expected a "=" operator in assignment statement

    Was diese Meldung bedeutet ist mir klar. Allerdings such ich nach einer ähnlichen Lösung wie meiner, blos mit dem Unterschied, dass sie funktioniert. =) Möglichweise steh ich da vollkommen aufm Schlau, aber mir fällt irgendwie nix ein wie ich das lösen könnte.

    Es soll quasi für jede Ebene eine definierte, von 1 hochgezählte Zahl (es geht nicht ums hochzählen, das ist alles klar) Variable entstehen.

    Als Beispiel: Am Ende soll dann $Array[1][1] den Befehl und $Array[1][2] den Wert für Ebene 1 enthalten, $Array[2][1] den Befehl und $Array[2][2] den Wert für Ebene 2 und so weiter.

    Vielen Dank für eure Hilfe :thumbup:

    EDIT: Bitte letzten Post lesen! Danke

    2 Mal editiert, zuletzt von Prixma (2. Februar 2011 um 14:09)

  • Okay hab mein Fehler selbst gefunden. -.-

    Hatte zuvor $Array[iLayer] nicht festgelegt.

    Sorry :)

  • Hey ich bin es nochmal

    bitte helft mir noch einmal auf die Sprünge ....

    Das nachfolgende Beispiel ist denke ich klar. Am Ende zeigt die MsgBox das Wort blub, so wie es vorgesehen ist.

    [autoit]

    ;#include <Array.au3>
    ;Global $Array[4]
    $Array = StringSplit("Blib,Blub,Blab",",")
    _ArrayDisplay($Array)
    MsgBox(1,"X",$Array[2])

    [/autoit]

    Beim nächsten Beispiel kommt allerdings dann ein Fehler, dass das Array möglichweise nicht belegt ist oder nicht vorhanden ist. Aber warum? Was muss in die MsgBox damit der Sting Blub dort ausgeben wird?

    [autoit]

    #include <Array.au3>
    Global $Array[4]
    $Array[2] = StringSplit("Blib,Blub,Blab",",")
    _ArrayDisplay($Array[2])
    MsgBox(1,"X",$Array[2][2])

    [/autoit]

    Vielen Dank

    • Offizieller Beitrag

    Der Fehler liegt darin, dass Du damit kein 2D-Array erzeugst, sondern ein Array im Array, was sich in AutoIt nicht direkt ansprechen lässt.
    Du musst das Array temporär in eine Array-Variable kopieren:

    [autoit]


    #include <Array.au3>
    Global $Array[4]
    $Array[2] = StringSplit("Blib,Blub,Blab", ",")
    _ArrayDisplay($Array[2])
    $aTmp = $Array[2]
    MsgBox(1, "X", $aTmp[2])

    [/autoit]
  • Aha .... okay. Vielen Dank
    Und wie müsste der Code aussehen um es in eine 2D Array zu speichern? Falls das möglich ist mit einfachen mitteln. Also möglist ohne großen Zeilenaufwand und Funktionen.

    Das die 1. Zahl die schon oben genannte Ebene angibt und die 2. dann die Rückgabe aus dem StringSplit?

    Also:

    • $Array[2][1] = Blib
    • $Array[2][2] = Blub
    • $Array[2][3] = Blab