Comma Separated Values (CSV)-Dateien sind ein weit verbreitetes Format zum Speichern tabellarischer Daten. Dieser Artikel präsentiert zwei effiziente C#-Methoden zum Lesen von CSV-Dateien und Speichern ihres Inhalts in Arrays. Wir werden einen manuellen Ansatz mit der StreamReader
-Klasse und eine optimiertere Lösung unter Verwendung der TextFieldParser
-Klasse aus der Microsoft.VisualBasic.FileIO
-Bibliothek untersuchen.
Inhaltsverzeichnis
CSV-Dateien mit StreamReader lesen
Der StreamReader
-Ansatz bietet granulare Kontrolle über den Leseprozess und ermöglicht die Anpassung an verschiedene CSV-Formate. Er erfordert jedoch mehr manuelle Behandlung von Trennzeichen und Fehlerbedingungen.
using System;
using System.IO;
public class CsvReaderStreamReader
{
public static string[][] ReadCsv(string filePath)
{
string[][] data = new string[0][]; // Initialisierung als leeres Array
try
{
using (StreamReader reader = new StreamReader(filePath))
{
string line;
while ((line = reader.ReadLine()) != null)
{
string[] values = line.Split(',');
Array.Resize(ref data, data.Length + 1);
data[data.Length - 1] = values;
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Fehler beim Lesen der CSV-Datei: {ex.Message}");
}
return data;
}
public static void Main(string[] args)
{
string filePath = "data.csv";
string[][] csvData = ReadCsv(filePath);
if (csvData != null)
{
foreach (string[] row in csvData)
{
Console.WriteLine(string.Join(" ", row));
}
}
}
}
Dieser verbesserte Code vergrößert das Array dynamisch und vermeidet so die willkürliche Begrenzung der anfänglichen Größe. Er verwendet auch String-Interpolation für klarere Fehlermeldungen und string.Join
für eine prägnante Ausgabe.
CSV-Dateien mit TextFieldParser lesen
Der TextFieldParser
vereinfacht das Parsen von CSV-Dateien, insbesondere bei komplexen Dateien mit zitierten Feldern oder benutzerdefinierten Trennzeichen. Er behandelt diese Feinheiten automatisch.
using Microsoft.VisualBasic.FileIO;
using System;
public class CsvReaderTextFieldParser
{
public static string[][] ReadCsv(string filePath)
{
string[][] data = new string[0][];
try
{
using (TextFieldParser parser = new TextFieldParser(filePath))
{
parser.TextFieldType = FieldType.Delimited;
parser.SetDelimiters(",");
while (!parser.EndOfData)
{
string[] fields = parser.ReadFields();
Array.Resize(ref data, data.Length + 1);
data[data.Length - 1] = fields;
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Fehler beim Lesen der CSV-Datei: {ex.Message}");
}
return data;
}
public static void Main(string[] args)
{
string filePath = "data.csv";
string[][] csvData = ReadCsv(filePath);
if (csvData != null)
{
foreach (string[] row in csvData)
{
Console.WriteLine(string.Join(" ", row));
}
}
}
}
Dieser Code verarbeitet das CSV-Parsing effizient mit TextFieldParser
. Denken Sie daran, einen Verweis auf die Microsoft.VisualBasic
-Assembly in Ihrem Projekt hinzuzufügen.
Methodenvergleich
Beide Methoden erzielen das gleiche Ergebnis, aber TextFieldParser
wird aufgrund seiner Robustheit und Benutzerfreundlichkeit, insbesondere bei komplexen CSV-Dateien, im Allgemeinen bevorzugt. StreamReader
bietet mehr Kontrolle für spezielle Szenarien, erfordert jedoch eine sorgfältige Fehlerbehandlung und Trennzeichenverwaltung.