| 

.NET C# Java Javascript Exception

1
Scheinbar ist CSV-Support nicht im .NET-Framework eingebaut. Hat jemand Erfahrung mit einer Bibliothek zum CSV-Dateien Einlesen? Außerdem muss ich auch CSV-Dateien schreiben können. Gibt es eine API welche gültiges CSV mit konfigurierbarem Trennzeichen ausgeben kann?
22.12.2010
landolf 103 1 5
8 Antworten
5
Ich würde mich vom selbstgeschriebenen CSV-Parser so weit wie möglich fernhalten. Da kommt man nur in Teufels Küche.

Der hier tut gute Dienste: File Helpers 2.0
09.02.2011
Also ich bin mit meinem sehr zufrieden :P
Floyd 09.02.2011
1
also diese Bibliothek ist wirklich super und sie kann eigentlich alles was man braucht. Hab ich gleich mal in mein Projekt eingebaut. Danke für den Tip!
Wend0rlin 23.02.2011
+1 für die Empfehlung, sowas nicht selbst zu schreiben
Matthias Hlawatsch 12.09.2011
Wieso kommt man in Teufel Küche? CSV ist einfach zu implementieren und man vermeidet damit eine weitere Abhängigkeit zu einem externen Produkt.
puls200 12.09.2011
http://creativyst.com/Doc/Articles/CSV/CSV01.htm#ExampleData
Wie lange brauchst Du für einen Parser, der das korrekt einliest?
Matthias Hlawatsch 12.09.2011
Länger als 10 Minuten :-)
Die Frage ist natürlich auch ob er in einer eig. Implementierung alle Sonderfälle abdecken muss. Ich bin jedenfalls immer dafür externe Referenzen auf ein Minimum zu reduzieren.
puls200 12.09.2011
2
Programmier es doch selbst, sollte kein so hoher Aufwand sein. Dateien auslesen kannst du mit der StreamReader Klasse. Wenn du die Datei zeilenweise einliest kannst du mit der split-Methode
die Zeile aufteilen, entsprechend dem trennzeichen.
Zum Schreiben kannst du die String.Join Methode verwenden, welche die Elemente eines String-Arrays mit Trennzeichen aneinanderhängt.

mfG
22.12.2010
heizi 29 1
+1, soweit richtig, aber wenigstens ein bischen Psydocode hätte ich mir gewünscht.
Floyd 23.12.2010
Ganz so trivial ist das nicht, schließlich erlaubt CSV auch escapte Trennzeichen und (bei Gebrauch von Anführungszeichen) Zeilenwechsel in Feldern.
Matthias Hlawatsch 12.09.2011
1
Aus einem meiner Projekte der CSV-Parser. Für das erzeugen musst du den Weg einfach nur umkehren:

public static DataTable GetDataTableFromText(Stream stream, string seperator, Encoding encoding) {
DataTable dt = new DataTable();
using (StreamReader sr = new StreamReader(stream, encoding)) {
string strLine = sr.ReadLine();
string[] strArray = strLine.Split(seperator);

//dt.ExtendedProperties.Add("HeadLine_CheckSum", strLine.GetMD5Hash());

if (strLine.Contains(seperator.ToString())) {
foreach (string value in strArray) {
DataColumn nC = new DataColumn(value.Trim() + System.Guid.NewGuid().ToString());
nC.Caption = value.Trim();
dt.Columns.Add(nC);
}

DataRow dr = dt.NewRow();
while (sr.Peek() > -1) {
strLine = sr.ReadLine();
if (strLine.Trim() != "" && strLine.Contains(seperator.ToString())) {
strArray = strLine.Split(seperator);
dt.Rows.Add(strArray);
}
}
}

}
return dt;
}


Die Spaltennamen werden automatisch aus der CSV importiert.

Verwendung:

//Importieren der Datei "test.csv" mit UTF8-Zeichencodierung die ein Semikolon als Trennern verwendet
DataTable dtSource = ImporterHelper.GetDataTableFromText(new FileStream(@"c:\test.csv", FileMode.Open), ";", Encoding.UTF8);
foreach (DataRow row in dtSource.Rows) {
//dein Code
}
23.12.2010
Floyd 11,0k 3 9
Floyd 11,0k 3 9
1
Hallo,
man kann ihn natürlich selber schreiben oder mal hier nachschauen

da sind alle Features drin, die man im Umgang mit CSV Dateien so braucht, er ist schnell und einfach zu nutzen...kann ich nur empfehlen.

mfg
08.02.2011
Wend0rlin 46 2
man muß wirklich nicht jedes rad neu erfinden...
devio 16.02.2011
CSVReader ist empfehlenswert, ich schließe mich Wend0rlin an.
Andy 24.02.2011
1
Alternativ kannst du mit mit ADO.NET und dem Jet.OleDb Provider auf CSV-Files zugreifen:

ConnectionString:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Folder\;Extended Properties='text;HDR=Yes;FMT=Delimited';"


und

"Select * From File.csv"


Mit einer passenden Schema.ini Datei zum CSV-File kannst du die Struktur angeben.
08.02.2011
Maria Simlinger 864 8
1
Beispiel für eine CSV Datei mit dem Format:
"A,""B"",""C"",""D"""

public IEnumerable<string[]> GetAllRows()
{
string[]rows = System.IO.File.ReadAllLines(File.FullName);
foreach (var row in rows)
{
yield return parser.Parse(row);
}
}


public string[] Parse(string text)
{
const string mySeparator ="|::|";
const string firstSeparator = "\"\",\"\"";
const string secondSeparator = ",\"\"";

var parsedText = text.Trim('"');
parsedText = parsedText.Replace(firstSeparator , mySeparator);
parsedText = parsedText.Replace(secondSeparator , mySeparator);
return parsedText.Split(new[] { mySeparator }, StringSplitOptions.None);
}
09.02.2011
KCT 521 6
0
Ich hab mal in einem Projekt den CSVReader von Andrew Stellman verwendet. Hauptkriterium war für mich damals, dass ich die Sourcen unter dem Compact Framework zum Laufen bringen konnte.

Wenn eine Zeile mit dem Trennzeichen endete (das letzte Feld also leer war), hat das Ding nicht das geliefert, was ich erwartet habe. Sonst war ich zufrieden.
12.09.2011
Matthias Hlawatsch 8,4k 2 8
0
Wieso um alles in der Welt sollte man sowas nochmals selber neu erfinden?? Es gibt doch wahrlich genügend bereits vorhandene Code-Libraries dafür.

Z.B. A Fast CSV Reader - in C# Source Code verfügbar - einfach runterladen, einsetzen - fertig!
18.09.2011

Stelle deine .net-Frage jetzt!