Lesen Sie eine CSV-Datei in eine Datentabelle in C#
-
Bibliotheken zum Einlesen einer CSV-Datei in eine DataTable in
C#
-
Verwenden Sie den GenericParser von Andrew Rissing, um eine CSV-Datei zu lesen und in einer DataTable in
C#
anzuzeigen -
Verwenden Sie CSV Reader von Sebastien Lorion, um eine CSV-Datei zu lesen und in einer DataTable in
C#
anzuzeigen -
Verwenden Sie den Textfeld-Parser, um eine CSV-Datei zu lesen und in einer Datentabelle in
C#
anzuzeigen
In diesem Artikel werden verschiedene C#-Bibliotheken untersucht, die verwendet werden können, um eine CSV-Datei zu analysieren und ihren Inhalt in einer DataTable in einem C#-Fenster anzuzeigen.
Bibliotheken zum Einlesen einer CSV-Datei in eine DataTable in C#
Beim Programmieren stoßen wir oft auf eine Situation, in der wir ein Datenformat in ein anderes konvertieren müssen. Das CSV-Format ist eines der Formate, um einige halbstrukturierte Daten in einer Datei zu speichern.
Eine CSV-Datei ist eine durch Kommas getrennte Datei, in der Daten in mehreren Spalten und Feldern gespeichert und durch ein Spaltentrennzeichen (``) getrennt werden.
Viele verschiedene C#-Bibliotheken sind zum Analysieren solcher Dateitypen verfügbar. In diesem Artikel werden wir die drei beliebtesten und am häufigsten verwendeten Bibliotheken besprechen:
- Generischer Parser von Andrew Rissing
- CSV-Reader von Sebastien Lorion
- Textfeld-Parser
Diese Bibliotheken werden in C#-Sprache entwickelt und bieten einfache Möglichkeiten, die Daten aus CSV-Dateien abzurufen und auf dem Bildschirm anzuzeigen.
Verwenden Sie den GenericParser von Andrew Rissing, um eine CSV-Datei zu lesen und in einer DataTable in C#
anzuzeigen
GenericParser ist eine leichtgewichtige, portable Lösung, die Daten mit Trennzeichen und fester Breite mit wenigen externen Anforderungen effizient parst. Jede von Microsoft bereitgestellte Lösung kann durch den GenericParser ersetzt werden, der ebenfalls einzigartige Funktionen bietet.
Der Code hat ein klares Layout und ist einfach zu verstehen und zu ändern. Dieser Parser ist im Vergleich zu den anderen beiden Parsern hinsichtlich Speicher und Zeit am effizientesten.
Installation und Verwendung von GenericParser
Um die erforderlichen Bibliotheksdateien für GenericParser zu installieren, erstellen wir zunächst eine Windows Form-Anwendung in Visual Studio und navigieren zu Tools->Manage Nuget Packages for the Solution, wie im folgenden Screenshot gezeigt:
Es erscheint ein Fenster mit verschiedenen für Ihr Projekt verfügbaren Paketen.
Gehen Sie zur Registerkarte Durchsuchen, suchen Sie nach Generic Parser und wählen Sie Installieren, nachdem Sie Ihr Projekt im rechten Bereich des Fensters ausgewählt haben. Dies wird im folgenden Screenshot demonstriert:
Dadurch werden alle erforderlichen Bibliotheksdateien in Ihrem Projekt installiert. Nach Abschluss der Installation können Sie die Bibliothek in Ihrem Code verwenden.
Für den Code haben wir eine DataGridView
in einem Formular erstellt, um die Datentabelle anzuzeigen, die aus einer CSV-Datei gefüllt wird. Öffnen Sie die Datei Form1.cs
und schreiben Sie den Code in die Formularladefunktion.
Der erste Schritt besteht darin, ein Objekt von GenericParserAdapter
zu erstellen. Wir verwenden die Klasse Adapter
, da wir die Daten in der Datentabelle anzeigen müssen.
Die Klasse Adapter
stellt uns die Methode zur Verfügung, um die gesamten Daten direkt in die Datentabelle zu kopieren.
Nachdem das Objekt erstellt wurde, stellen wir den Pfad für die auszulesende CSV-Datei mit der Funktion SetDataSource
bereit. Wenn die Datenquelle bereitgestellt wird, werden verschiedene Attribute der Datendatei festgelegt, wie z. B. Spaltentrennzeichen, Kopfzeilen der ersten Zeile, Puffergröße, maximale Anzahl von Zeilen und der Textqualifizierer.
Nach der Initialisierung erhalten wir die Daten in der DataTable mit der Funktion GetDataTable
. Diese Funktion füllt automatisch alle Daten aus der CSV-Datei in die Datentabelle, einschließlich der Zeilenüberschriften.
Lassen Sie uns dies in einem C#-Code kapseln:
DataTable dataTable = new DataTable();
using GenericParserAdapter dataParser = new GenericParserAdapter();
dataParser.SetDataSource("SampleCSVFile.csv");
dataParser.ColumnDelimiter = ',';
dataParser.FirstRowHasHeader = true;
dataParser.SkipStartingDataRows = 0;
dataParser.MaxBufferSize = 4096;
dataParser.MaxRows = 1000000;
dataParser.TextQualifier = '\"';
dataTable = dataParser.GetDataTable();
Wenn die Datentabelle ausgefüllt ist, binden wir sie an die DataGridView
auf dem Formular, sodass alle Daten in tabellarischer Form angezeigt werden.
dataGridView1.DataSource = dataTable;
Bei der Ausführung ergibt dies die folgende Ausgabe:
Verwenden Sie CSV Reader von Sebastien Lorion, um eine CSV-Datei zu lesen und in einer DataTable in C#
anzuzeigen
Der CSV-Reader von Sebastian Lorion ist als Lumen Works CSV Reader bekannt. Es ist ein vorwärtsgerichteter, nicht zwischengespeicherter Reader, dessen Design auf System.IO.StreamReader
basiert (dasselbe wie das, was manchmal als Fire-Schlauch-Cursor bezeichnet wird).
Es ist im Vergleich zu OLEDB- und Regex-Methoden etwa 15-mal schneller, verbraucht jedoch nur sehr wenig Speicher.
Um diese Bibliothek zu installieren, durchsuchen wir Nuget-Pakete (siehe vorheriges Beispiel für diesen Schritt) und suchen nach LumenWorks CSV Reader
.
Es verfügt über mehrere Klassen, die unterschiedliche Funktionalitäten zum Lesen von CSV-Dateien bereitstellen. Dazu gehören CsvReader
und CachedCsvReader
.
CsvReader
wird verwendet, wenn Sie Zeile für Zeile lesen und auf dem Bildschirm anzeigen müssen. CachedCsvReader
wird verwendet, wenn Sie die CSV-Daten an einen Datenbetrachter auf dem Bildschirm binden müssen, wie z. B. ein DataGrid
.
Es ist so einfach wie das Öffnen der Datei und das Anzeigen auf dem Bildschirm.
Nehmen wir an, wir haben eine Beispiel-CSV-Datei wie im vorherigen Beispiel, und wir müssen diese CSV-Datei parsen und sie in der DataGridView
der Formularanwendung anzeigen (genau wie im vorherigen Beispiel).
using (CachedCsvReader dataReader = new CachedCsvReader(new StreamReader("SampleCSVFile.csv"),
true)) {
// The headers in the CSV file will be the columns of the DataTable
dataGridView1.DataSource = dataReader;
}
Da wir die Daten auf einem DataGridView
darstellen müssen, haben wir die Klasse CachedCsvReader
verwendet. Das Erstellen seiner Objekte erfordert ein Objekt von StreamReader
, da sein zugrunde liegendes Design auf StreamReader
basiert.
Nach dem Öffnen der Datei werden alle Dateidaten im Objekt dataReader
gespeichert. Wir binden dieses Objekt mit der DataGridView
auf dem Formularbildschirm.
Die DataGridView
wird automatisch entsprechend der Anzahl der Spalten und sogar der Namen der Spalten gefüllt. Sie müssen die Spalten nicht selbst erstellen.
Die Ausgabe ist dieselbe wie die vorherige, da wir dieselbe Datei für beide Codesegmente verwendet haben.
Verwenden Sie den Textfeld-Parser, um eine CSV-Datei zu lesen und in einer Datentabelle in C#
anzuzeigen
Die Klasse TextFieldParser
wurde aus dem Microsoft-Namensraum VisualBasic.FileIO
, ehemals Bestandteil von Visual Basic, portiert.
Bitte beachten Sie, dass dieser Parser nur mit Versionen von .NET Core 3.0 und höher kompatibel ist. .NET Core-Versionen 2.2 und früher werden nicht unterstützt.
Der TextFieldParser
bietet Methoden und Eigenschaften, um strukturierte Textdateien zu parsen. Es unterstützt auch zwei Arten von Dateien: mit Trennzeichen (CSV) und mit fester Breite.
Der einzige Nachteil ist, dass er nicht so schnell und effizient ist wie die beiden vorherigen Parser. Darüber hinaus bietet es nicht viele Funktionen wie die anderen in diesem Artikel besprochenen Parser, wie das Binden von Daten mit einigen Ansichten oder das Abrufen der Daten in tabellarischer Form.
Sie müssen die Daten explizit Zeile für Zeile lesen und die Tabelle selbst füllen. Dies macht es zu einem langwierigen Prozess und erfordert mehr Codierungsschritte.
Wir müssen das Nuget-Paket installieren, um den Textfeld-Parser zu implementieren. Durchsuchen Sie das NuGet-Paketfenster und suchen Sie nach Text Field Parser:
Gehen Sie nach der Installation der erforderlichen Bibliotheksdateien zur Codedatei und erstellen Sie eine Funktion zum Lesen der Daten aus der CSV-Datei. In dieser Funktion erstellen wir zuerst ein Objekt von TextFieldParser
und ein DataTable
-Objekt.
Im weiteren Verlauf geben wir das Begrenzungstokensymbol für das Objekt an und initialisieren andere Werte.
Danach lesen wir die erste Zeile der Datei, um die Spalten der Datentabelle zu erstellen, und fügen diese Spalten hinzu. Dann lesen wir die verbleibenden Daten und fügen sie der DataTable Zeile für Zeile hinzu.
Lassen Sie es uns in einer Codierungsfunktion kapseln:
private static DataTable ParseDataFromCSV(string path) {
DataTable myData = new DataTable();
try {
using (TextFieldParser reader = new TextFieldParser(path)) {
reader.SetDelimiters(new string[] { "," });
reader.HasFieldsEnclosedInQuotes = true;
string[] col_headers = reader.ReadFields();
foreach (string h in col_headres) {
DataColumn d1 = new DataColumn(h);
d1.AllowDBNull = true;
myData.Columns.Add(d1);
}
while (!reader.EndOfData) {
string[] row_data = reader.ReadFields();
myData.Rows.Add(row_data);
}
}
}
Rufen Sie diese Funktion über die Treiberfunktion auf, die den Dateipfad wie folgt bereitstellt:
DataTable dataTable = new DataTable();
dataTable = ParseDataFromCSV("SampleCSVFile.csv");
dataGridView1.DataSource = dataTable;
Die Ausgabe dieses Codesegments ist ebenfalls dieselbe wie die vorherigen.
C#-Benutzer können CSV-Dateien mit dem unkomplizierten und benutzerfreundlichen TextFieldParser lesen. Es bietet Techniken und Attribute, die das Parsen von Dateien wie Dateien mit Trennzeichen (CSV) und Dateien mit fester Breite vereinfachen.
Sie müssen keine Software von Drittanbietern verwenden, da diese bereits standardmäßig in .NET Core 3.0+ enthalten ist.