Hallo,
Ich habe mal eine Klasse geschrieben, die
CSV-Dateien einliest und die einzelnen Elemente extrahiert. Dabei werden auch in '"' eingeschlossenen Strings korrekt erkannt.
Verwendet wird es so:
Delphi-Quellcode:
Var
csvReader : TCSVReader;
sData : TFileStream;
Begin
sData := TFileStream.Create('Sample.CSV',fmOpenRead);
csvReader := TCSVReader.Create (sData, ';');
csvReader.First; // Nach Änderung auf Veranlassung von Grenzgaenger nun notwendig. Dank an 'deadcandance'
Try
While not csvReader.Eof Do Begin
For i:=0 to csvReader.ColumnCount - 1 Do
Memo.Lines.Add (csvReader.Columns[i]);
csvReader.Next;
End;
Finally
csvReader.Free;
sData.Free;
End;
End;
Es ist ziemlich flott. Vielleicht kann Jemand etwas damit anfangen.
Bugreports und Verbesserungsvorschläge sind natürlich erwünscht.
Bug: Grenzgaenger hat mich auf einen Fehler in der Behandlung von '""' aufmerksam gemacht. Weiterhin wünschte er sich den Quote-Character als Eigenschaft. Bitte sehr.
Erweiterung: ralfschwalbe hätte gern, das die Klasse auch mit UNIX-Umbrüchen umgehen kann. Bitte sehr.
Erweiterung: Noch besser: Man kann nun das EOL-Zeichen und die Länge selbst angeben (z.B. für Unix #10 und 1, Windows: #13 und 2)
Änderung: Laut grenzgaenger hat der Aufruf von 'First' im Konstruktor nix zu suchen. Recht hat er!
Bug: Kater Karlo hat einen Fehler im Konstruktor entdeckt, der bei Streams auftritt, deren Position>0 ist. Weiterhin ist ein überflüssiges privates Feld entfernt worden.