C# Programming

Effizientes Lesen von CSV-Dateien und Speichern in Arrays mit C#

Spread the love

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert