Wenn du eine CSV-Datei einlesen willst, musst du beachten, dass es (wahrscheinlich - ich kenne die Datei nicht) zwei Arten von Trennzeichen gibt: Zum einen die Trenner für die Zeilen, also CRLF, CR, oder LF, je nach Betriebssystem, oder allgemein in FPC: Lineending. Und zum anderen die Trenner für die einzelnen Spalten in jeder Zeile; da du von StrictDelimiter = ';' schreibst, handelt es sich hier wahrscheinlich um den Strichpunkt. Der Dateiinhalt könnte also etwa so aussehen:
Code: Alles auswählen
abc def;ghi;jkl;mno;pqr;stu;vwx;yz
123;456;789;012;345;678;901;234;567
AAA;BBB;CCC
Wenn du das mit LoadFromFile in eine StringList "StrList" einliest, stehen die Zeilen mit dem Index i als StrList.Items
oder kürzer StrList zur Verfügung. Jede Zeile musst du nun am Strichpunkt in die einzelnen Felder auftrennen. Am einfachsten geht das mit dem StringHelper ".Split", der die einzelnen Felder in ein Stringarray ablegt:
Code: Alles auswählen
var
StrList: TStringList;
i: Integer;
sa: TStringArray;
begin
StrList := TStringList.Create;
try
StrList.LoadFromFile(DATEI_NAME);
WriteLn('Original-Text:');
WriteLn(StrList.Text);
for i:=0 to StrList.Count-1 do begin
WriteLn('Zeile: ', i);
sa := StrList[i].Split(';');
for j:=0 to High(sa) do
WriteLn(' j: ', j, ' Feldinhalt: ', sa[j]);
end;
finally
StrList.Free;
end;
Oder du nimmtst eine zweite StringListe mit Delimiter ';', StrictDelimiter true, und weist ihrem DelimitedText den Inhalt jeder Zeile zu; damit erhältst du die Feldelemente als Elemente der zweiten StringList; die Trennung erfolgt automatisch in der StringList, wenn ihr ein String an DelimitedText zugewiesen wird:
Code: Alles auswählen
var
StrList: TStringList;
Felder: TStringList;
i, j: Integer;
begin
StrList := TStringList.Create;
try
StrList.LoadFromFile(DATEI_NAME);
WriteLn('Original-Text:');
WriteLn(StrList.Text);
Felder := TStringList.Create;
try
Felder.Delimiter := ';';
Felder.StrictDelimiter := true;
for i:=0 to StrList.Count-1 do begin
WriteLn('Zeile: ', i);
Felder.DelimitedText := StrList[i];
for j := 0 to Felder.Count-1 do
WriteLn(' j: ', j, ' Feldinhalt: ', Felder[j]);
finally
Felder.Free;
end;
finally
StrList.Free;
end;
end.