String in 2-Dimensionalen Array splitten

  • VBScript

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von benebelt1.

    String in 2-Dimensionalen Array splitten

    Hey Hey,

    das ist mein erster Beitrag hier im Forum und programmiere erst seit kurzem mit vbs, also entschuldigt bitte, falls ich gängige Formen nicht einhalte.


    Ich möchte aus einer Text-Datei einen String einlesen und diesen in Zeilen und Spalten in ein zwei-dimensionales Array splitten. Die Text-Datei in einen String einzulesen ist kein Problem. Allerdings habe ich beim zweiten Split Probleme und bekomme Fehler raus.

    Länge der Zeilen und Spalten soll variieren können, je nachdem was in der txt-Datei steht.



    Meine Code-Idee mit Beispielstring:

    Visual Basic-Quellcode

    1. '##############################
    2. Dim sSatz, aReihen, aaTabelle
    3. sSatz = "A1,A2,A3,A4:B1,B2,B3:C1,C2,C3,C4,C5"
    4. 'Split String into Zeilen
    5. aReihen = Split(sSatz, ":")
    6. 'Split Zeilen into Spalten
    7. dim i
    8. For i=0 to ubound(aReihen)
    9. aaTabelle(i) = Split(aReihen, ",")
    10. next
    11. 'Test zur Kontrolle:
    12. call msgbox(aaTabelle(0,0))
    13. '##############################



    Leider habe ich keine Ahnung, ob das so überhaupt möglich ist oder meine Lösung sehr anfängermäßig aussieht.
    Und wie man den Code hier korrekt darstellt, weiß ich leider auch noch nicht.

    Vielen Dank!

    Code-Tags eingefügt ~ EaranMaleasi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „EaranMaleasi“ ()

    Entweder

    Visual Basic-Quellcode

    1. Dim sSatz, aReihen, aaTabelle(), i
    2. sSatz = "A1,A2,A3,A4:B1,B2,B3:C1,C2,C3,C4,C5"
    3. 'Split String into Zeilen
    4. aReihen = Split(sSatz, ":")
    5. 'Split Zeilen into Spalten
    6. ReDim aaTabelle(UBound(aReihen))
    7. For i = 0 To UBound(aReihen)
    8. aaTabelle(i) = Split(aReihen(i), ",")
    9. Next
    10. 'Test zur Kontrolle:
    11. Call MsgBox(aaTabelle(0)(0))
    dann hast du Arrays im Array.
    Oder mit einem zweidimensionalen Array

    Visual Basic-Quellcode

    1. Dim sSatz, aReihen, aSpalten, aaTabelle(), i, j, jMax
    2. sSatz = "A1,A2,A3,A4:B1,B2,B3:C1,C2,C3,C4,C5"
    3. 'Split String into Zeilen
    4. aReihen = Split(sSatz, ":")
    5. 'Split Zeilen into Spalten
    6. ReDim aaTabelle(UBound(aReihen), 0)
    7. For i = 0 To UBound(aReihen)
    8. aSpalten = Split(aReihen(i), ",")
    9. For j = 0 To UBound(aSpalten)
    10. If j > jMax Then
    11. jMax = j
    12. ReDim Preserve aaTabelle(UBound(aReihen), jMax)
    13. End If
    14. aaTabelle(i, j) = aSpalten(j)
    15. Next
    16. Next
    17. 'Test zur Kontrolle:
    18. Call MsgBox(aaTabelle(0, 0) & " - " & aaTabelle(i - 1, j - 1))
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Super, Dankeschön!

    Ich hatte bisher nicht ganz verstanden, dass da ein Unterschied zwischen dem Array im Array und einem zweidimensionalen Array besteht, macht aber Sinn.

    Das Array im Array hat unterschiedliche Längen, was die Spalten angeht und das zweidimensional Array hat immer gleiche Spaltenlängen.

    Was mir noch nicht so ganz klar ist, ist warum ich in der ersten Lösung mein Array 'aaTabelle' als Array dimensionieren muss und das beim Array 'aReihen' aber nicht nötig ist. Liegt das daran, dass man 'aaTabelle' sonst nicht redimensionieren kann?

    Ich probiere den Code dann später gleich aus.

    Vielen Dank @petaod

    benebelt1 schrieb:

    warum ich in der ersten Lösung mein Array 'aaTabelle' als Array dimensionieren muss und das beim Array 'aReihen' aber nicht nötig ist. Liegt das daran, dass man 'aaTabelle' sonst nicht redimensionieren kann?
    Ja. so ist es.
    aReihen ist zunächst ein Variant und wird durch das Split zum Array. Man könnte es, wenn man wollte, auch gleich als Array dimensionieren.
    aaTabelle muss als Array bekannt sein, um ein ReDim ausführen zu können.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --