LINQ to CSV: Lesen einer CSV Datei mittels LINQ

Zum Zugriff auf Datenmengen bietet sich LINQ als leistungsstarke Spracherweiterung an. Eine CSV Datei ist im Prinzip nichts anderes als eine speziell formatiert Datenmenge. Daher liegt es nahe auch in diesem Anwendungsfall LINQ einzusetzen. In diesem Artikel möchte ich Ihnen daher zeigen wie sich CSV Dateien mittels LINQ lesen lassen.

 
Dateiinhalt

Als Beispieldatei habe ich eine Datei angelegt in welcher der Vorname, Nachname und das Alter von Personen gespeichert wird. Als Trennzeichen wird dabei ein Komma verwendet. Nachfolgend sehen Sie den Inhalt der Testdatei.

Hans,Mueller,35

Sabine,Schmidt,37

Uwe,Meier,74

 
Schnittstelle für Dateizugriff

Mittels LINQ kann nicht direkt auf die Datei zugegriffen werden. Der Dateiinhalt sollte daher eingelesen und in einer für LINQ auswertbaren Form bereitgestellt werden. Dies ist relativ einfach realisierbar. Die nachfolgende Funktion liest die Datei ein und wandelt den Inhalt in ein Aufzählungsobjekt vom Typ IEnumerable um.

    1 private static IEnumerable<string[]> ReadFile(StreamReader reader, string delimiter)

    2 {

    3     while (reader.EndOfStream == false)

    4     {

    5         yield return reader.ReadLine().Split(delimiter.ToCharArray());

    6     }

    7 }

 
Datei mittels LINQ lesen

Mit Hilfe der zuvor erzeugten Funktion lässt sich der Dateiinhalt nun mittels einer LINQ Anweisung ermitteln. Der nachfolgende Quellcode zeigt eine einfache Abfrage bei welcher der komplette Dateiinhalt ausgelesen und in eine Objektliste umgewandelt wird.

    1 static void Main(string[] args)

    2 {

    3     using(StreamReader reader = new StreamReader("test.csv"))

    4     {

    5         var content = from line in ReadFile(reader, ",")

    6                         select new

    7                         {

    8                             FirstName = line[0],

    9                             LastName = line[1],

   10                             Age = Convert.ToInt32(line[2])

   11                         };

   12 

   13         foreach (var item in content)

   14         {

   15             Console.WriteLine(

   16                 item.FirstName + " " +

   17                 item.LastName + ": " +

   18                 item.Age);

   19         }

   20     }

   21 

   22     Console.ReadKey();

   23 }

 
Fazit

LINQ bietet eine effiziente Alternative zum Lesen einer CSV Datei. Dabei können beispielweise direkt die gewohnten where Klauseln eingesetzt werden um nur Teildaten zu lesen. Die hier vorgestellte Beispielimplementierung ist natürlich noch sehr ausbaufähig, zeigt Ihnen aber das allgemeine Vorgehen zum Zugriff auf die CSV Datei.

Advertisements
Dieser Beitrag wurde unter .NET, C#, LINQ abgelegt und mit , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s