große txt Dateien einlesen und verarbeiten

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    große txt Dateien einlesen und verarbeiten

    Hallo an alle Spezies,

    seit 3 Tagen lese ich mich durch das Inernet aber ein Lösung hat sich mir noch nicht aufgetan. Ich fang mal der Reihe nach an.
    Vor vielen Monden habe ich noch mit vb5 gearbeitet. Seitdem habe ich nichts mehr mit VB gemacht, nun habe ich ein VS2012 und viele neue tolle Sachen...
    Aufgabe ist folgende:
    • lese ein .txt file ein und konvertiere es zu .csv
    • lese mehrere .txt files ein und konvertiere sie zu einem .csv
    • weitere Aufgaben die das Bearbeiten und Asuwerten der Daten beinhalten werden folgen
    Bis dahin war alles noch fast zu einfach. Ich benutze Stream reader und lese die txt in Blöcken in ein und schreibe sie zuerst in ein temp, danach kopiere ich das temp in ein csv file. Das war oder ist aus Performance Gründen wichtig, weil ich dateien mit mehr als 100k Zeilen und ca. 120mb Größe dabei habe.
    Da funktionierte so lange gut, bis ich eine Datei habe, die zwar vom inhalt der Spalten gleich ist, jedoch die Reihenfolge der Spalten anders ist. Jetzt funktioniert das einlesen (habe die Blöcke dann in Arrays zerlegt) und Ausgeben so nicht mehr.
    Daher habe ich die dateien in ein dataset eingelesen und diese dann mit merge vereinigt. Klappt super wenn die Dateien nicht sehr groß sind. Sobald sie eine bestimmte Größe haben bekomme ich einen unschönen Stack Overflow.
    Also dachte ich mir, lies doch die Dateien in eine Datenbank ein und bearbeite sie dann entsprechend. Und hier kommt mein Black whole: Wie und mit welcher Methode würdet ihr das am besten anstellen? Ich brauche die Daten später sowoeso wieder um weitere Bearbeitungen bzw. Analysen anzustellen.
    - LocalDB?
    - Access DB? (fände ich persönlich gut - Frage ist aber ob das dann auch auf PC's ohne Access läuft)
    - ???
    Da ich noch nicht so versiert in VS 2012 bin, würde ich mich über Antworten freuen, die auch ein bisschen kommentiert sind (kein Muss)

    Herzlichen Dank schon mal an die Gemeinde!
    Gruß Günni
    mir scheint, das kann man zeilenweise verarbeiten, und gibt keinen Grund, das nicht zu tun.
    also vom prinzip mittm Streamreader immer eine Zeile lesen, nach gutdünken umformen, und dann mit einem Streamwriter wegschreiben.

    also Streamreader und Streamwriter sind bei dem Vorgang gleichzeitig geöffnet, natürlich auf verschiedene Dateien.
    die zeilenweise Verabeitung dauerte bei mehr als 100.000 lines erheblich länger. daher habe ich die Dateien blockweise eingelesen. Ist um einiges schneller aber auch komplizierter vom Code. Um die Daten weiter zu verarbeiten in welche Art DB würded ihr die einlesen. Einen SQL Server möchte und kann ich nicht aufsetzen. Dennoch reden wir über Daten von mehr als 1Million lines und ca. 80 Spalten.
    Wenn ich es richtig verstanden habe, würde SQL compact und Access DB keine weitere Instsallationen beim Client benötigen. Oder? Was ist bei dieser Größe Performancetechnisch besser?