Wie liest man am besten eine tabulatorgetrennte Textdatei in C #?

8

Wir haben eine Textdatei mit etwa 100.000 Zeilen, etwa 50 Spalten pro Zeile, die meisten Daten sind ziemlich klein (5 bis 10 Zeichen oder Zahlen).

Dies ist eine ziemlich einfache Aufgabe, aber Sie fragen sich nur, was der beste Weg wäre, diese Daten in eine C # -Datenstruktur zu importieren (zum Beispiel eine DataTable)?

    
alchemical 26.01.2010, 22:41
quelle

6 Antworten

9

Ich würde es als CSV mit den Tab-Spaltenbegrenzern lesen:

Ein schneller CSV-Reader

Bearbeiten:
Hier ist ein Beispiel für das, was Sie brauchen:

%Vor%

Dabei steht CSV_FULLNAME für den vollständigen Pfad + Dateiname Ihrer tabulatorgetrennten CSV.

    
Jay Riggs 26.01.2010, 22:45
quelle
3

Verwenden Sie den integrierten Textparser von .NET. Es ist kostenlos, hat eine große Fehlerbehandlung und beschäftigt sich mit vielen seltsamen Fällen.

Ссылка

    
Jonathan Allen 26.01.2010 23:07
quelle
1

Was ist mit FileHelpers , können Sie die Registerkarte als Trennzeichen definieren. HEAD auf über den Link geliefert zu dieser Seite und haben eine peeksy.

Hoffe, das hilft, Freundliche Grüße, Tom.

    
t0mm13b 26.01.2010 22:59
quelle
0

Zwei Optionen:

  1. Verwenden Sie die Klassen im Namespace System.Data.OleDb . Dies hat den Vorteil, dass Sie direkt in eine Datentabelle hineinlesen können, wie Sie es mit sehr wenig Code getan haben, aber es kann schwierig sein, richtig zu arbeiten, da es sich um einen Tab statt um ein Komma handelt.
  2. Verwenden oder schreiben Sie einen CSV-Parser. Stellen Sie sicher, dass es sich um einen auf der Zustandsmaschine basierenden Parser handelt, wie zum Beispiel den @Jay Riggs, der mit einem String.Split () - basierten Parser verknüpft ist. Dies sollte schneller als die OleDb-Methode sein, aber es wird Ihnen eine Liste oder ein Array anstelle einer Datentabelle geben.
Joel Coehoorn 26.01.2010 22:47
quelle
0

Wie auch immer Sie die Zeilen analysieren, stellen Sie sicher, dass Sie etwas verwenden, das das Weiterleiten und Zurückspulen unterstützt, da dies die Datenquelle Ihres Datenrasters ist. Du willst nicht zuerst alles in den Speicher laden, oder? Wie wäre es, wenn die Datenmenge beim nächsten Mal verzehnfacht werden sollte? Mache etwas, das file.seek tief benutzt, lies nicht alles zuerst in den Speicher. Das ist mein Rat.

    
Erik A. Brandstadmoen 26.01.2010 23:02
quelle
0

Einfach, aber nicht unbedingt ein großartiger Weg:

  • Lesen Sie die Datei mit einem Textleser in eine Zeichenfolge

  • Verwenden Sie String.Split, um die Zeilen

  • abzurufen
  • Verwenden Sie String.Split mit einem Tabulatorzeichen, um Feldwerte zu erhalten

Andrew Lewis 26.01.2010 23:05
quelle

Tags und Links