Gibt es eine standardmäßige / offizielle / empfohlene Methode zum Parsen von CSV-Dateien in C #? Ich möchte meinen eigenen Parser nicht rollen.
Außerdem habe ich Fälle von Personen gesehen, die ODBC / OLE DB zum Lesen von CSV über den Texttreiber verwenden, und viele Personen raten aufgrund seiner "Nachteile" davon ab. Was sind diese Nachteile?
Im Idealfall suche ich nach einer Möglichkeit, die CSV anhand des Spaltennamens zu lesen, wobei der erste Datensatz als Kopf- / Feldname verwendet wird. Einige der angegebenen Antworten sind korrekt, arbeiten jedoch daran, die Datei grundsätzlich in Klassen zu deserialisieren.
Ein CSV-Parser ist jetzt Teil von .NET Framework.
Fügen Sie einen Verweis auf Microsoft.VisualBasic.dll hinzu (funktioniert in C # einwandfrei, der Name spielt keine Rolle)
Die Dokumente sind hier - TextFieldParser-Klasse
PS Wenn Sie einen CSV- Exporteur benötigen , versuchen Sie es mit CsvExport (siehe unten: Ich bin einer der Mitwirkenden).
quelle
TextFieldParser.ReadLine()
. Siehe TextFieldParser docsCsvHelper (eine von mir verwaltete Bibliothek) liest eine CSV-Datei in benutzerdefinierte Objekte.
Manchmal besitzen Sie nicht die Objekte, in die Sie lesen möchten. In diesem Fall können Sie eine fließende Zuordnung verwenden, da Sie der Klasse keine Attribute zuweisen können.
BEARBEITEN:
Für CsvReader muss jetzt CultureInfo an den Konstruktor übergeben werden ( https://github.com/JoshClose/CsvHelper/issues/1441 ).
Beispiel:
quelle
In einer Geschäftsanwendung verwende ich das Open Source-Projekt auf codeproject.com, CSVReader .
Es funktioniert gut und hat eine gute Leistung. Es gibt einige Benchmarking für den Link, den ich bereitgestellt habe.
Ein einfaches Beispiel, kopiert von der Projektseite:
Wie Sie sehen können, ist es sehr einfach, damit zu arbeiten.
quelle
Ich weiß, dass es etwas spät ist, habe aber gerade eine Bibliothek gefunden,
Microsoft.VisualBasic.FileIO
die eineTextFieldParser
Klasse zum Verarbeiten von CSV-Dateien hat.quelle
Wenn Sie nur CSV- Dateien lesen müssen, empfehle ich diese Bibliothek: Ein schneller CSV-Reader
Wenn Sie auch CSV- Dateien generieren müssen, verwenden Sie diese: FileHelpers
Beide sind kostenlos und OpenSource.
quelle
Hier ist eine Hilfsklasse, die ich oft benutze, falls jemand jemals auf diesen Thread zurückkommt (ich wollte ihn teilen).
Ich benutze dies, um es einfach in gebrauchsfertige Projekte zu portieren:
Und benutze es wie:
[Aktualisierter CSV-Helfer: Fehler behoben, bei dem das letzte neue Zeilenzeichen eine neue Zeile erstellt hat]
quelle
Diese Lösung verwendet die offizielle Microsoft.VisualBasic- Assembly zum Parsen von CSV.
Vorteile:
Code:
quelle
Ich habe TinyCsvParser für .NET geschrieben, einen der schnellsten .NET-Parser, der es gibt und der in hohem Maße konfigurierbar ist, um fast jedes CSV-Format zu analysieren.
Es wird unter MIT-Lizenz veröffentlicht:
Sie können NuGet verwenden , um es zu installieren. Führen Sie den folgenden Befehl in der Package Manager-Konsole aus .
Verwendung
Stellen Sie sich vor, wir haben eine Liste von Personen in einer CSV-Datei
persons.csv
mit Vorname, Nachname und Geburtsdatum.Das entsprechende Domänenmodell in unserem System könnte folgendermaßen aussehen.
Wenn Sie TinyCsvParser verwenden, müssen Sie die Zuordnung zwischen den Spalten in den CSV-Daten und der Eigenschaft in Ihrem Domänenmodell definieren.
Und dann können wir das Mapping verwenden, um die CSV-Daten mit a zu analysieren
CsvParser
.Benutzerhandbuch
Ein vollständiges Benutzerhandbuch finden Sie unter:
quelle
Hier ist meine KISS-Implementierung ...
quelle
Vor einiger Zeit hatte ich eine einfache Klasse für CSV-Lesen / Schreiben basierend auf der
Microsoft.VisualBasic
Bibliothek geschrieben. Mit dieser einfachen Klasse können Sie mit CSV wie mit einem zweidimensionalen Array arbeiten. Sie finden meine Klasse unter folgendem Link: https://github.com/ukushu/DataExporterEinfaches Anwendungsbeispiel:
Zum Lesen des Headers müssen Sie nur die
csv.Rows[0]
Zellen lesen :)quelle
Single-Source-Dateilösung für einfache Parsing-Anforderungen, nützlich. Beschäftigt sich mit allen bösen Randfällen. B. die Normalisierung neuer Zeilen und die Behandlung neuer Zeilen in Zeichenfolgenliteralen in Anführungszeichen. Herzlich willkommen!
Wenn Ihre CSV-Datei einen Header hat, lesen Sie einfach die Spaltennamen (und berechnen die Spaltenindizes) aus der ersten Zeile. So einfach ist das.
Beachten Sie, dass
Dump
es sich um eine LINQPad-Methode handelt. Sie können diese entfernen, wenn Sie LINQPad nicht verwenden.quelle
Eine weitere in dieser Liste ist Cinchoo ETL - eine Open-Source-Bibliothek zum Lesen und Schreiben mehrerer Dateiformate (CSV , Flatfile , XML , JSON usw.).
Das folgende Beispiel zeigt, wie CSV-Dateien schnell gelesen werden können (kein POCO-Objekt erforderlich).
Das folgende Beispiel zeigt, wie eine CSV-Datei mit einem POCO-Objekt gelesen wird
Weitere Informationen zur Verwendung finden Sie in den Artikeln bei CodeProject .
quelle
Basierend auf dem Beitrag von unlimit zum Thema Wie kann eine CSV mit der Funktion C # split () richtig aufgeteilt werden? ::
HINWEIS: Dies behandelt keine maskierten / verschachtelten Kommas usw. und ist daher nur für bestimmte einfache CSV-Listen geeignet.
quelle
Dieser Code liest csv in DataTable:
quelle
Wenn jemand ein Snippet möchte, kann er sich in seinen Code einfügen, ohne eine Bibliothek binden oder ein Paket herunterladen zu müssen. Hier ist eine Version, die ich geschrieben habe:
quelle
Hier ist eine kurze und einfache Lösung.
quelle