|
|
|
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
|
|
|
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
|
|
|
|
+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
|
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;
}//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
}
|
|
|
|
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Folder\;Extended Properties='text;HDR=Yes;FMT=Delimited';"
"Select * From File.csv"
|
|
"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);
}
|
|
|
|
|
|