Text To Array

  • Guten Abend an Alle,

    ich habe eine txt Datei, dessen Inhalt wie folgt aufgebaut ist:
    1[Tab]Test1
    2[Tab]Test2
    usw.

    wenn ich nun die Funktion _FileReadToArray verwende und anschließend _ArrayDisplay, dann wird das Array so angezeigt:

    1Test1
    2Test2

    Ich möchte aber, dass das Arry in Abhägigkeit vom Tab das Array in zwei Spalten auftrennt. Kann mir jemand sagen wie ich das mache?
    Vielen Dank und viele Grüße,
    TOYY1

  • Mach ein neues 2D Array in der Form $Array[x][2] (x = Anzahl der Items im ersten Array). Dann gehst du alle Items des ersten Arrays durch (am besten mit einer For Schleife), und teilst sie mit StringSplit (@TAB als Trennzeichen) in ein temporäres Array mit den 2 gewünschten Elementen. Diese 2 Elemente ordnest du dann dem 2ten Array zu. Also immer $ArrayNeu[$i][0] = Erstes Item; $ArrayNeu[$i][1] = Zweites Item.

  • Hallo name22 und danke für die schnelle Antwort. StringSplit kenne ich. Mir ist grad nur nicht ganz klar...Ich lese ja erstmal die Txt Datei ein und bereits da werden die durch Tab getrennten Strings zusammengefügt ?( ? Ich steh grad auf dem Schlauch.

  • Zitat

    Hallo name22 und danke für die schnelle Antwort. StringSplit kenne ich. Mir ist grad nur nicht ganz klar...Ich lese ja erstmal die Txt Datei ein und bereits da werden die durch Tab getrennten Strings zusammengefügt ?( ? Ich steh grad auf dem Schlauch.


    Entweder werden Tabs von ArrayDisplay nicht dargestellt, oder sie werden von _FileReadToArray gelöscht. Probier erst mal ein Item mit StringSplit beim Tab zu splitten. Wenn das nicht geht, musst du eventuell den gesamten Text mit FileRead auslesen und die Zeilen dann selbst mit StringSplit an den Zeilenumbrüchen aufteilen (@CRLF/@CR/@LF).

  • Hallo TOYY1,

    das kannst du so machen:

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <array.au3>

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

    Global $aFile
    _FileReadToArray(@ScriptDir & "\2darray_.txt",$aFile)
    ;_ArrayDisplay($aFile)

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

    Global $a2DArray[$aFile[0]+1][2]

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

    for $i = 1 to $aFile[0]
    $aTmp = StringSplit($aFile[$i],@TAB)
    $a2DArray[$i][0]= $aTmp[1]
    $a2DArray[$i][1]= $aTmp[2]
    Next
    $a2DArray[0][0] = $aFile[0]
    _ArrayDisplay($a2DArray)

    [/autoit]

    mfg autoBert

  • Hallo und vielen Dank an alle Antworten,

    Ich habe jetzt den Code von autoBert genommen, bekomme aber leider die Fehlermeldung (siehe Überschrift) und weiß nicht wieso...? ?(

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseX64=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <File.au3>
    #include <array.au3>
    Global $aFile
    _FileReadToArray("C:\Test.txt",$aFile)
    Global $a2DArray[$aFile[0]+1][2]
    For $i = 1 to $aFile[0]
    $aTmp = StringSplit($aFile[$i],@TAB)
    $a2DArray[$i][0]= $aTmp[1]
    $a2DArray[$i][1]= $aTmp[2]
    Next
    $a2DArray[0][0] = $aFile[0]
    _ArrayDisplay($a2DArray)

    [/autoit]

    Kann mir jemadn sagen was ich falsch mache?
    Vielen Dank und viele Grüße
    TOYY1

  • Okay, ich habe das Problem gefunden...In der txt Datei waren noch 5 Zeilen, also ganz unten, w nichts drin stand... Wieso kann der Code dann nicht ausgeführt werden?

  • hallo,

    ich denke mal, weil der string split dann nichts zu splitten hat und somit kommt ein fehler!

    wenn du das ArrayDisplay($aFile) so wie in autoBerts beispiel aktivierst, kannst du dir ja das array vorab, vor dem stringsplit mal ansehen.

    gruß gmmg

    • Offizieller Beitrag

    Da immer mal Leerzeilen oder Zeilen mit Whitespaces enthalten sein können, füge eine Zeile hinzu:

    [autoit]

    For $i = 1 to $aFile[0]
    If StringStripWS($aFile[$i], 8) = '' Then ContinueLoop ; damit werden Leerzeilen (bzw. Zeilen mit Whitespaces - s. Hilfe) ignoriert
    $aTmp = StringSplit($aFile[$i],@TAB)
    $a2DArray[$i][0]= $aTmp[1]
    $a2DArray[$i][1]= $aTmp[2]
    Next

    [/autoit]