File zu array - mit unterschiedliche daten

  • Hallo ihr Lieben,

    Ich würde gerne ein txt File auslesen und zu ein array erzeugen.

    Hier die Daten aus meinen Text Datei:

    Line 1 ;1 ;0

    Line 2 ;1 ;0 ;2

    Line 3 ;1 ;0 ;3

    Line 5 ;1 ;0 ;4

    Line 6 ;1 ;0 ;5 ;7

    Ich will immer mit ein ";" eine Spalte erzeugen, nur leider wo weniger eingetragen ist kommt dann ein Fehler.

    Hoff dafür gibt es eine einfache Lösung für dieses Problem ?

    Liebe Grüße

    Speedy

  • Die _FileReadToArray kann zwar prinzipiell 2D-Arrays mit Hilfe eines Delimiters erzeugen.

    Jedoch leider nur wenn die Spaltenanzahl gleich bleibt.

    Das ist bei dir ja leider nicht der Fall.

    Eine Möglichkeit wäre die Datei zeilenweise einzulesen und sich das ganze selbst zu schreiben.

    Eine andere wäre einfach eine UDF zu nehmen welche für csv-Dateien vorgesehen ist.

    Mit >>dieser UDF<< würde der Code bei dir folgendermaßen aussehen:

    AutoIt
    #include "parsecsv.au3"
    
    $aArray = _parsecsv("Test.csv")
    _ArrayDisplay($aArray)

    Alternativ kann man auch deinen Code abwandeln mit dem kleinen Nachtteil, dass du vorher die maximale Anzahl an Spalten kennen musst:

    Will man völlig flexibel sein, was die Anzahl der Spalten angeht könnte man deinen Code folgendermaßen abwandeln:

    2 Mal editiert, zuletzt von AspirinJunkie (16. September 2020 um 14:47)

  • Vor langer Zeit habe ich mal eine Funktion gebastelt die einen String -> Array verwandelt (und umgekehrt). Dabei wird (nahezu) jeder Datentyp unterstützt. Man kann also z.B. ein Array aus Arrays vom Typ [String, float, int, Filepath, int int] haben und daraus einen einzelnen String machen, bei der rückumwandlung werden die Datentypen auch wiederhergestellt (also es ist nicht alles "String", sondern ehemalige ints bleiben ints).

    Ich weiß nicht genau was du vorhast, aber ich selbst nutze diese Funktion ziemlich oft um Sachen auf der Festplatte zwischenzuspeichern. Dann hat man im Skript ein großes Array das alles relevante enthält und dieses schreibt und liest man bei Bedarf auf die Platte. Der hierbei entstehende String ist aber NICHT für Menschen nachvollziehbar, man kann also nicht von Hand darin herumschreiben.

    _ArrayToStringEx

    lg

    M

  • Ich hätte das Problem so gelöst:

  • Hallo,

    Das ist auch gut aber mir kommt gerade drauf das ich es anders machen kann.

    zb. ich lass es mit ein Gui eintragen.

    Hier mal meine simples Gui ohne Hintergrund Funktionen.

    Plan ist ich Trage die Daten ein zb.Name: Line 1 Nummer: 105

    Wäre doch besser wenn hier immer das File eingelesen und wieder abgespeichert wird.

    Mit Create erstell ich eine neue Zeile und ich will es auf max 5 Nummer bzw. Spalten begrenzen.

    Ich versuch es mal ob ich so etwas komplexes schon schreiben kann :) bin noch nicht so Fit in der Materie.

    Liebe Grüße

  • Hallo Speedy86

    zu deinem Startpost.
    Dein Code würde laufen, wenn du eine weitere For Schleife nach dem StringSplit nutzen würdest (mit Ubound) und darin etwas wie $a2D[$i-1][$ii] füllen würdest, statt blind von fünf Elementen auszugehen..

    Grüße autoiter

    2 Mal editiert, zuletzt von Bitnugger (24. September 2020 um 12:04) aus folgendem Grund: "Ddein Code" ==> "Dein Code" ;-)