Sprache: C#
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;
}
/// <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;
}
Alte URL:
/snippet/csv-datei-in-datatable-einlesen/437
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:
http://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