Feedback

C# - CSV Datei in DataTable einlesen

Veröffentlicht von am 1/21/2007
(2 Bewertungen)
Liest eine CSV Datei aus und gibt den Inhalt in einer DataTable zurück.

benötigte Namespaces:
System.IO
/// <summary>
/// Gibt den Inhalt einer CSV Datei in einer DataTable zurück
/// </summary>
/// <param name="path">Pfad der CSV Datei</param>
/// <param name="seperator">Zeichen mit dem die Spalten getrennt werden. Meist ';' oder ','</param>
/// <returns></returns>
private DataTable GetDataTable(string path, char seperator)
{
    DataTable dt = new DataTable();
    FileStream aFile = new FileStream(path, FileMode.Open);
    using (StreamReader sr = new StreamReader(aFile, System.Text.Encoding.Default))
    {
        string strLine = sr.ReadLine();
        string[] strArray = strLine.Split(seperator);

        foreach (string value in strArray)
            dt.Columns.Add(value.Trim());

        DataRow dr = dt.NewRow();

        while (sr.Peek() > -1)
        {
            strLine = sr.ReadLine();
            strArray = strLine.Split(seperator);
            dt.Rows.Add(strArray);
        }
    }
    return dt;
}
Abgelegt unter CSV, DataTable.

1 Kommentare zum Snippet

Weh Pung schrieb am 2/12/2009:
Der Code taugt natürlich nicht viel.

Er geht schief, wenn *Daten* den Seperator enthalten. Das ist laut RFC 4180 erlaubt, ebenso wie Daten, die einen Zeilenumbruch enthalten (hier geht obiger Code auch schief).

Eine brauchbare C#-CVS-Bibliothek, die mit dem CSV umgehen kann, dem man in der Realität begegnet - und zudem rasend schnell ist - findet man hier:
www.codeproject.com/KB/database/CsvReader.aspx

Beispiel-CSV aus der Wikipedia, welches schon schiefgeht:

Stunde;Montag;Dienstag;Mittwoch;Donnerstag;Freitag
1;Mathe;Deutsch;Englisch;Mathe;Kunst
2;Sport;"Religion ev;kath";Kunst;Deutsch;Kunst
 

Logge dich ein, um hier zu kommentieren!