Problem beim Kopieren mehrdimensionaler Arrays

  • Hallo alle zusammen,

    ich hab in meinem Script das ich schreibe ein Array mit den Dimensionen [17][4], also ein zweidimensionales. Nun brauch ich in einer Funktion zum immer nur z.B. $array[4]. Da ich nun aber nich jedesmal den Index neu dazuschreiben will (wird aus mehreren Variablen zusammengesetzt und sieht daher unschön aus wenns jedesmal aufs neue auftaucht ^^ ) wollt ich jetzt also von diesem Element die 2. Dimension in ein eindimensionales kopieren.

    Aber ich merk scho ... beschreiben lässt sich das nur sehr schwer, ich zeig euch mal an nem Test-Script was ich mein :D

    [autoit]


    #include <Debug.au3>
    #include <array.au3>

    _DebugSetup("Test-Session")

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

    Dim $test[3][2]

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

    _DebugOut("Filling arrays with some data")
    $test[0][0] = "0;0"
    $test[0][1] = "0;1"
    $test[1][0] = "1;0"
    $test[1][1] = "1;1"
    $test[2][0] = "2;0"
    $test[2][1] = "2;1"

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

    _DebugOut("$test has " & UBound($test, 0) & " dimensions")
    _DebugOut("Dimension 1 has " & UBound($test) & " Elements")
    _DebugOut("Dimension 2 has " & UBound($test, 2) & " Elements")
    _ArrayDisplay($test[0])
    _DebugOut("$test[0] has " & UBound($test[0]) & " Elements") ; Hierbei stürzt die ganze Kiste immer mit der unten geschriebenen Fehlermeldung ab

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

    ; Ziel dieser ganzen Prozedur ist eigentlich folgendes auszuführen:
    $element = $test[1] ; Hier stürzt das ganze Theater genauso ab
    ; So könnt ich jetzt einfach zugreifen:
    ; $element[0] wäre "1;0" und $element[1] wäre "1;1"

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

    #comments-start
    >Running:(3.2.10.0):G:\AutoIt3\autoit3.exe "G:\Documents\Ausbildung\SGH2007\Test.au3"
    G:\Documents\Ausbildung\SGH2007\Test.au3 (18) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    _DebugOut("$test[0] has " & UBound($test[0]) & " Elements")
    _DebugOut("$test[0] has " & UBound(^ ERROR
    ->14:53:27 AutoIT3.exe ended.rc:1
    +>14:53:28 AutoIt3Wrapper Finished
    >Exit code: 1 Time: 3.790
    #comments-end

    [/autoit]

    Mein erster Gedanke war eigentlich, dass ich vllt. $element auf ne bestimmte Art und Weise diemensionieren muss. Also hab ichs mit dim $element[4] probiert und noch etlichen weiteren. Auch z.B. mit dim $element[1][4] und ähnlichem. Um die genauen Dimensionen rauszufinden habsch dann halt ma die Zeile mit dem Ubound($test[0]) geschrieben und siehe da ... auch dort verabschiedete er sich mit dieser Fehlermeldung wobei es dort ja noch gar keine Variablenzuweisungen gab.

    Daher nun meine Frage an euch: gibts es irgendeine Möglichkeit das umzusetzen (außer vllt. manuell die zweite Dimension stück für Stück rauszukopieren)? Ich wäre euch sehr dankbar für ne Idee :)

    mfg, mh166

    Einmal editiert, zuletzt von mh166 (14. Dezember 2007 um 08:30)

  • meinst du das so?

    [autoit]

    For $i = 0 To Ubound($test)-1
    MsgBox(0,"",Ubound($test) )
    Dim $Array[Ubound($test)]
    $Array[$i] = $test[$i][1]
    Next

    [/autoit]


    nicht getestet, aber du hast einen Syntaxfehler bei UBound
    es gibt dort einen Parameter names Dimension und deswegen wird es ohne $var[irgendwas] angegeben

    Einmal editiert, zuletzt von leviathan (12. Dezember 2007 um 18:27)

  • Stimmt mit dem UBound da haste recht. War ein Denkfehler von mir.

    Was dein Codeschnipsel angeht, so triffts nich ganz was ich vorhatte. Was ich meinte war dieses:

    [autoit]

    Dim $Array[Ubound($test, 2)]
    For $i = 0 To Ubound($test, 2)-1
    $Array[$i] = $test[1][$i]
    Next

    [/autoit]

    Also quasi um die zweite Dimension von einem Element des Quell-Arrays in die erste Dimension des Ziel-Arrays zu verschieben. Allerdings wollte ich das halt gern ohne eine Schleife einrichten und dachte daher man könne folgendes tun:

    [autoit]

    $Array = $test[1]

    [/autoit]

    So würde also $test[1] das Array der zweiten Dimension zurückgeben und dieses $Array zuweisen. So jedenfalls war der Plan ^^

    mfg, mh166

  • denke nicht, dass es ohne Schleife möglich ist mehrere Werte so zu kopieren und ja seh grad den Fehler

  • Nich ohne Schleife ... schade :( Aber trotzdem danke für die schnelle und freundliche Hilfe :)

    Falls doch noch jemand das Gegenteil beweisen kann und will (also Gegenteil von "ohne Schleife", nich von "schnell und freundlich" ;) ), so möge er bitte sprechen und nicht für immer schweigen. :D

    mfg, mh166

    PS: Es sollte einen Status "Halb geschlossen" gegeben. So richtig will ich mich mit der Lösung ja noch nich abgeben, aber immerhin isses ja erstmal eine ... *gg*

  • Hab den Thread jetzt einfach mal auf geschlossen gesetzt. Mit der Schleife funktioniert es ja und offensichtlich gibts ja wirklich keine andere Lösung. Danke trotzdem :)

    mfg, mh166