Frage zu Array und StringSplit

  • Hallo zusammen,

    folgender Code erzeugt ein Array:

    [autoit]

    Local $Array
    $Array = StringSplit("123456", "")

    [/autoit]

    Das Ergebnis in $Array sieht dann so aus:

    Code
    Index	Inhalt
    0	6
    1	1
    2	2
    3	3
    4	4
    5	5
    6	6

    Ich möchte das aber gerne zweidimensional machen

    [autoit]

    Local $Array[4]
    For $i = 0 To 3
    $Array[$i] = StringSplit("123456", "")
    Next

    [/autoit]

    Das Ergebnis in $Array sieht dann so aus:

    Code
    Index	Inhalt
    0	
    1	
    2	
    3

    Erwartet hätte ich aber:

    Könnte mir jemand zeigen, wie ich es richtig löse?

    Vielen Dank und viele Grüße
    M3d1c5

  • Was du erzeugst ist kein 2D-Array sondern ein Array-in-Array.
    Also ein 1D-Array dessen Elemente wiederrum einzelne 1D-Arrays sind.

    Um es also auszulesen musst du erst aus dem äußeren Array das gewünschte Array herausnehmen (entspricht deiner Zeile), dieses temporär in einer Variablen speichern und dann in diesem das Element an der entsprechenden Reihenposition auswählen.

    Willst du ein 2D-Array machen müsstest du das 2D-Array vordimensionieren (oder immer per ReDim erweitern) und über 2 verschachtelte For-Schleifen schrittweise aufbauen.

    Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    ;------------- Array in Array-Lösung -----------------------
    Local $Array[4]
    For $i = 0 To 3
    $Array[$i] = StringSplit("123456", "")
    Next

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

    ; 1. Möglichkeit des Auslesens:
    For $i in $Array
    For $x = 1 To UBound($i)-1
    ConsoleWrite($i[$x] & @TAB)
    Next
    ConsoleWrite(@CRLF)
    Next
    ConsoleWrite(@CRLF)

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

    ;2. Möglichkeit des Auslesens:
    For $i = 0 To UBound($Array) -1
    $aTemp = $Array[$i]
    For $x = 1 To UBound($aTemp)-1
    ConsoleWrite($aTemp[$x] & @TAB)
    Next
    ConsoleWrite(@CRLF)
    Next

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

    ; ---------------- 2D-Array-Lösung -------------------------
    ; 1. Möglichkeit der Erstellung:
    Global $N = 4
    Global $Array[$N][1]
    For $i = 0 To $N -1
    $aTemp = StringSplit("123456", "", 2)
    If UBound($aTemp) > UBound($Array, 2) Then ReDim $Array[UBound($Array)][UBound($aTemp)]

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

    For $x = 0 To UBound($aTemp) -1
    $Array[$i][$x] = $aTemp[$x]
    Next
    Next
    _ArrayDisplay($Array)

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

    ; 2. Möglichkeit der Erstellung:
    Global $Array[1][1]
    For $i = 0 To 5
    $aTemp = StringSplit("123456", "", 2)
    If UBound($aTemp) > UBound($Array, 2) Then ReDim $Array[UBound($Array)][UBound($aTemp)]

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

    If UBound($Array) <= $i Then ReDim $Array[$i+1][UBound($Array, 2)]

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

    For $x = 0 To UBound($aTemp) -1
    $Array[$i][$x] = $aTemp[$x]
    Next
    Next
    _ArrayDisplay($Array)

    [/autoit]

    Einmal editiert, zuletzt von AspirinJunkie (19. November 2012 um 14:10)

  • Ich hätte es wie AspirinJunkie mit einer 2D-Array Lösung versucht/gemacht.

    2D-Array Werte zuweisen, mit zwei Zählervariablen und ReDim :)

    Aber oben ist ja ein perfektes Beispiel :D

    Grüße Yaerox

    Grüne Hölle