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[i] oder kürzer StrList[i] 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.