Geht das auch mit einer
CSV-Datei der Form
Code:
Test;"Zeile 1 von Test
Zeile 2 von Test";Test
Daraus muss ein Record mit drei Feldern werden.
Nein, das geht nicht.
In
csv Dateien bedeutet das Zeilenende in der Regel dass ein neuer Datensatz beginnt. Sprich: Es sind keine Zeilenunbrüche in Feldern erlaubt.
In meiner Implementierung kopiere ich jede einzelne Zeile in ein TStrings und hole dann die einzelnen Felder aus diesem heraus.
Mit meiner Methode geht das also auf keinen Fall.
Ich habe mir das ursprünglich geschrieben um bestimmte Log-Dateien auszuwerten.
Für die CodeLib habe ich dann noch SaveToFile ergänzt.
Meine Intention, das in die CodeLib zu stellen, war zu zeigen, dass es einen relativ einfachen Weg gibt
csv Dateien zu importieren.
Letztendlich reicht schon folgender Quellcode aus um eine
csv-Datei zu lesen und auf alle einzelnen Felder zuzugreifen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
slFile, slRow: TStringList;
i, j: Integer;
begin
slFile := TStringList.Create;
slRow := TStringList.Create;
slRow.Delimiter := '
;';
slRow.QuoteChar := '
"';
try
slFile.LoadFromFile('
dateiname.csv');
for i := 0
to slFile.Count - 1
do
begin
slRow.DelimitedText := slFile[i];
// wandelt eine csv-Zeile um -> jedes Feld bekommt eine eigene Zeile in slRow
for j := 0
to slRow.Count - 1
do
begin
Memo1.Lines.Add(Format('
Row:%3d Col:%2d: Value:%s', [i, j, slRow[j]]));
end;
end;
finally
slFile.Free;
slRow.Free;
end;
end;
Das ist ein gutes Beispiel für KISS (keep it stupid simple).
Ich hoffe diese Info hilft Dir.