Benutzer mit den meisten Antworten
CSV komfortable auslesen

Frage
Antworten
-
Hallo B.,
> relativ leicht ... CSV ... einlesen
Eine wichtige Technik bei CSV Dateien ist auch das Lesen über OleDbConnection. Mögliche Techniken hier das Replacing der nicht gewünschten Trenzeichen durch ein Komma: [Using Oledb to read a .csv with double quotes in it]public Form1() { InitializeComponent(); DataTable dt = GetTableFromCSV("test.csv"); // Ergebnis steht in dt } private DataTable GetTableFromCSV(string pfad) { if (!File.Exists(pfad)) throw new FileNotFoundException(@"Die CSV-Datei existiert nicht!", pfad); string csv = File.ReadAllText(pfad, Encoding.Default); csv = csv.Replace(";", ","); string tmp = "Tmp.csv"; File.WriteAllText(tmp, csv, Encoding.Default); DataTable dataTable = new DataTable(); OleDbConnectionStringBuilder b = new OleDbConnectionStringBuilder(); b.Provider = "Microsoft.Jet.OLEDB.4.0"; b.DataSource = Directory.GetParent(pfad).FullName; b["Extended Properties"] = "Text;"; OleDbConnection con = new OleDbConnection(b.ToString()); OleDbDataAdapter da = new OleDbDataAdapter(String.Format("select * from [{0}]", tmp), con); da.Fill(dataTable); if (File.Exists(tmp)) File.Delete(tmp); return dataTable; }
Man kann es dann einfach wie bei einer Datenbank machen. zu berücksichtigen hier ggf. auch die Schema.ini: [Schema.ini File (Text File Driver)]
oder auch eine sehr einfache Variante:public Form1() { InitializeComponent(); List<string[]> csvElemente = GetListFromCSV("test.csv"); } private List<string[]> GetListFromCSV(string pfad) { string[] csvZeilen = File.ReadAllLines(fileInfo.FullName, Encoding.Default); return csvZeilen.Select(x => x.Split(',', ';')).ToList(); }
[C# Tutorial - Using The Built In OLEDB CSV Parser | Switch on the Code]
http://www.switchonthecode.com/tutorials/csharp-tutorial-using-the-built-in-oledb-csv-parserAndere CSV-DB-Treiber auch:
[Textfile Connection String Samples - ConnectionStrings.com]
http://www.connectionstrings.com/textfile
Trotzdem gehen natürlich auch viele andere Möglichkeiten:
http://www.google.de/#hl=de&q=CSV+Read+C%23
Der Ausdruck "leicht" ist halt relativ.
ciao Frank- Als Antwort markiert Robert BreitenhoferModerator Freitag, 3. Dezember 2010 13:04
-
Hallo Bensen,
Das Thema CSV wurde vor nicht allzu langer Zeit auch hier behandelt:
http://social.msdn.microsoft.com/Forums/de-AT/visualcsharpde/thread/9b304ca5-b4bf-45e1-ba16-d0b126affad4Wenn Du die CSV-Datei selbst erzeugst ("will eine csv erzeugen und auslesen"), dann müßtest Du doch die verwendeten Feldtrennzeichen kennen, oder?
Zur Sicherheit: Was die automatische Erkennung der Feldtrennzeichen angeht (solltest Du also gemeint haben "will eine csv erzeugen und [eine andere, fremde] auslesen"), ist das eine einfache Sache, wenn nur Komma bzw. Semikolon als Trennzeichen in Frage kommen: Du versuchst es erst mit dem einen (try) und wenn der Versuch fehlschlägt (catch), versuchst Du's eben mit dem anderen Trennzeichen. Ich würde dazu den CSVDataReader verwenden (www.csvreader.com).Gruß
Marcel- Als Antwort markiert Robert BreitenhoferModerator Freitag, 3. Dezember 2010 13:04
Alle Antworten
-
Hallo B
bekannte Links (teils OpenSource/ teils kommerziell)
http://www.codeproject.com/KB/database/CsvReader.aspx
http://www.codeproject.com/KB/cs/CsvReaderAndWriter.aspx
http://www.stellman-greene.com/CSVReader/
http://stackoverflow.com/questions/1375410/very-simple-c-csv-reader
http://stackoverflow.com/questions/906841/csv-parser-reader-for-c
http://commonlibrarynet.codeplex.com/
http://filehelpers.sourceforge.net/
http://www.csvreader.com/features.php
-
Hallo B.,
> relativ leicht ... CSV ... einlesen
Eine wichtige Technik bei CSV Dateien ist auch das Lesen über OleDbConnection. Mögliche Techniken hier das Replacing der nicht gewünschten Trenzeichen durch ein Komma: [Using Oledb to read a .csv with double quotes in it]public Form1() { InitializeComponent(); DataTable dt = GetTableFromCSV("test.csv"); // Ergebnis steht in dt } private DataTable GetTableFromCSV(string pfad) { if (!File.Exists(pfad)) throw new FileNotFoundException(@"Die CSV-Datei existiert nicht!", pfad); string csv = File.ReadAllText(pfad, Encoding.Default); csv = csv.Replace(";", ","); string tmp = "Tmp.csv"; File.WriteAllText(tmp, csv, Encoding.Default); DataTable dataTable = new DataTable(); OleDbConnectionStringBuilder b = new OleDbConnectionStringBuilder(); b.Provider = "Microsoft.Jet.OLEDB.4.0"; b.DataSource = Directory.GetParent(pfad).FullName; b["Extended Properties"] = "Text;"; OleDbConnection con = new OleDbConnection(b.ToString()); OleDbDataAdapter da = new OleDbDataAdapter(String.Format("select * from [{0}]", tmp), con); da.Fill(dataTable); if (File.Exists(tmp)) File.Delete(tmp); return dataTable; }
Man kann es dann einfach wie bei einer Datenbank machen. zu berücksichtigen hier ggf. auch die Schema.ini: [Schema.ini File (Text File Driver)]
oder auch eine sehr einfache Variante:public Form1() { InitializeComponent(); List<string[]> csvElemente = GetListFromCSV("test.csv"); } private List<string[]> GetListFromCSV(string pfad) { string[] csvZeilen = File.ReadAllLines(fileInfo.FullName, Encoding.Default); return csvZeilen.Select(x => x.Split(',', ';')).ToList(); }
[C# Tutorial - Using The Built In OLEDB CSV Parser | Switch on the Code]
http://www.switchonthecode.com/tutorials/csharp-tutorial-using-the-built-in-oledb-csv-parserAndere CSV-DB-Treiber auch:
[Textfile Connection String Samples - ConnectionStrings.com]
http://www.connectionstrings.com/textfile
Trotzdem gehen natürlich auch viele andere Möglichkeiten:
http://www.google.de/#hl=de&q=CSV+Read+C%23
Der Ausdruck "leicht" ist halt relativ.
ciao Frank- Als Antwort markiert Robert BreitenhoferModerator Freitag, 3. Dezember 2010 13:04
-
Hallo Bensen,
Das Thema CSV wurde vor nicht allzu langer Zeit auch hier behandelt:
http://social.msdn.microsoft.com/Forums/de-AT/visualcsharpde/thread/9b304ca5-b4bf-45e1-ba16-d0b126affad4Wenn Du die CSV-Datei selbst erzeugst ("will eine csv erzeugen und auslesen"), dann müßtest Du doch die verwendeten Feldtrennzeichen kennen, oder?
Zur Sicherheit: Was die automatische Erkennung der Feldtrennzeichen angeht (solltest Du also gemeint haben "will eine csv erzeugen und [eine andere, fremde] auslesen"), ist das eine einfache Sache, wenn nur Komma bzw. Semikolon als Trennzeichen in Frage kommen: Du versuchst es erst mit dem einen (try) und wenn der Versuch fehlschlägt (catch), versuchst Du's eben mit dem anderen Trennzeichen. Ich würde dazu den CSVDataReader verwenden (www.csvreader.com).Gruß
Marcel- Als Antwort markiert Robert BreitenhoferModerator Freitag, 3. Dezember 2010 13:04
-
CSV mit C# zu parsen ist ziemlich einfach möglich: http://codekicker.de/fragen/CSV-Parser-CSharp-fuer-CSV-Dateien-und-auch-CSV-Ausgabe/581 Hier steht, wie man einen CSV-Parser mit C# schreibt.