Arbeiten mit CSV in C# (.NET): Bibliotheken und Beispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit CSV in C# (.NET): Überblick über Werkzeuge und Beispiele

CSV (Comma-Separated Values) ist eines der am weitesten verbreiteten Formate für den Austausch von Tabellendaten. Im C# (.NET)-Ökosystem gibt es mehrere zuverlässige Methoden zur Arbeit mit diesem Format: von integrierten Mitteln bis hin zu leistungsstarken Drittanbieter-Bibliotheken. In diesem Artikel betrachten wir die grundlegenden Ansätze und bewährten Verfahren.



Warum man keinen CSV-Parser selbst schreiben sollte?

Das CSV-Format erscheint auf den ersten Blick einfach, enthält aber in der Praxis viele Nuancen: Maskierung von Anführungszeichen, Kommas innerhalb von Feldern, unterschiedliche Trennzeichen, Zeilenumbrüche in Werten. Die Verwendung fertiger Bibliotheken erspart Kopfschmerzen und die Behandlung von Randfällen.



Die Bibliothek CsvHelper – der Goldstandard

CsvHelper ist die beliebteste Bibliothek für die Arbeit mit CSV in .NET. Sie unterstützt das Mapping auf POCO-Klassen, Streaming-Lesen, Konfiguration von Trennzeichen und Kodierungen.

Installation über NuGet:

Install-Package CsvHelper


Beispiel: CSV in eine Liste von Objekten lesen

using CsvHelper;using System.Globalization;

public class User{ public int Id { get; set; } public string Name { get; set; } public string Email { get; set; }}

var users = new List<User>();using (var reader = new StreamReader("users.csv"))using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)){ users = csv.GetRecords<User>().ToList();}


Beispiel: CSV aus einer Sammlung schreiben

using (var writer = new StreamWriter("output.csv"))using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)){    csv.WriteRecords(users);}


Integrierter Parser: TextFieldParser (Microsoft.VisualBasic)

Wenn Sie keine externen Abhängigkeiten einbinden möchten, bietet .NET den integrierten TextFieldParser aus dem Namensraum Microsoft.VisualBasic.FileIO. Er ist in .NET Framework und .NET Core/.NET 5+ verfügbar (erfordert die Installation des Pakets Microsoft.VisualBasic).



Beispiel zur Verwendung von TextFieldParser

using Microsoft.VisualBasic.FileIO;

using (var parser = new TextFieldParser("data.csv")){ parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(","); parser.HasFieldsEnclosedInQuotes = true;

while (!parser.EndOfData) { string[] fields = parser.ReadFields(); Console.WriteLine(string.Join(" | ", fields)); }}

Vorteile: Keine Drittanbieter-Bibliotheken erforderlich. Nachteile: Weniger flexibel als CsvHelper, kein automatisches Mapping auf Klassen.



Arbeiten mit großen Dateien: Stream-Verarbeitung

Bei der Arbeit mit CSV-Dateien größer als 100 MB ist es wichtig, das Laden der gesamten Datei in den Arbeitsspeicher zu vermeiden. Beide Bibliotheken unterstützen die Stream-Verarbeitung:

  • CsvHelper – Verwenden Sie GetRecords<T>() in einer foreach-Schleife ohne Aufruf von .ToList().
  • TextFieldParser – Liest Zeile für Zeile, was ebenfalls effizient ist.


Beispiel für Streaming-Lesen mit CsvHelper

using (var reader = new StreamReader("large.csv"))using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)){    foreach (var record in csv.GetRecords<User>())    {        ProcessUser(record); // einzeln verarbeiten    }}


Fehlerbehandlung und Datenvalidierung

Beim Import von CSV können die Daten fehlerhaft sein. CsvHelper ermöglicht die Konfiguration der Fehlerbehandlung über Ereignisse:

csv.Configuration.BadDataFound = context =>{    Console.WriteLine($"Fehler in Zeile {context.RawRow}: {context.RawRecord}");};

Es können auch Attribute zur Feldvalidierung verwendet werden:

public class Product{    [Name("ProductId")]    public int Id { get; set; }        [Required]    public string Nam                    

Empfehlungen