Lesen Sie eine CSV-Datei in eine Datentabelle in C#

Naila Saad Siddiqui 15 Februar 2024
  1. Bibliotheken zum Einlesen einer CSV-Datei in eine DataTable in C#
  2. Verwenden Sie den GenericParser von Andrew Rissing, um eine CSV-Datei zu lesen und in einer DataTable in C# anzuzeigen
  3. Verwenden Sie CSV Reader von Sebastien Lorion, um eine CSV-Datei zu lesen und in einer DataTable in C# anzuzeigen
  4. Verwenden Sie den Textfeld-Parser, um eine CSV-Datei zu lesen und in einer Datentabelle in C# anzuzeigen
Lesen Sie eine CSV-Datei in eine Datentabelle in C#

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:

  1. Generischer Parser von Andrew Rissing
  2. CSV-Reader von Sebastien Lorion
  3. 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:

Schritt 1 zum Installieren der GenericParser-Bibliothek – NuGet-Pakete

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:

Schritt 2 zum Installieren der GenericParser-Bibliothek

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:

Ausgabe des generischen Parsers

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.

Schritt 1 zum Installieren der CSV-Reader-Bibliothek

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.

Ausgabe des CSV-Readers

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:

Schritt 1 der Installation der TextFieldParser-Bibliothek

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.

Ausgabe des Textfeld-Parsers

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.

Verwandter Artikel - Csharp CSV