@Lulle
In hab in der Zwischenzeit das Beispiel in Funktionen zerlegt, da man es gelegentlich braucht:
Delphi-Quellcode:
function CellsInCsvLine(AText: String; ADelimiter: Char): Word;
begin
with TStringList.Create do
try
Delimiter := ADelimiter;
DelimitedText := AText;
Result := Count;
finally
Free
end;
end;
function ReadCsvLineCell(AText: String; ADelimiter: Char; Col: Word; var
Value: String): Boolean;
begin
Value := '';
with TStringList.Create do
try
Delimiter := ADelimiter;
DelimitedText := AText;
Result := (Col <= Count) and (Col > 0);
if Result then
Value := Strings[Col - 1];
finally
Free
end;
end;
function ReplaceCsvLineCell(var AText: String; ADelimiter: Char; Col: Word;
Value: String): Boolean;
begin
with TStringList.Create do
try
Delimiter := ADelimiter;
DelimitedText := AText;
Result := (Col <= Count) and (Col > 0);
if Result then
begin
Strings[Col - 1] := Value;
AText := DelimitedText;
end;
finally Free end;
end;
procedure WriteCsvLineCell(var AText: String; ADelimiter: Char; Col: Word;
Value: String);
begin
with TStringList.Create do
try
if Col <= 0 then Exit;
Delimiter := ADelimiter;
DelimitedText := AText;
while Col > Count do
Add('');
Strings[Col - 1] := Value;
AText := DelimitedText;
finally Free end;
end;
Parameter:
Code:
AText ist eine Zeile aus der
Csv Tabelle
ADelimiter das Trennzeichen
Col die Spalte
Value der Wert der Spalte
Beispiele:
Delphi-Quellcode:
var
sText, Value: String;
begin
if ReadCsvLineCell(Memo1.Lines[0], ' ', 4, Value) then
ShowMessage(Value) else
ShowMessage('#Fehler#1');
sText := Memo1.Lines[0];
Value := '24';
if ReplaceCsvLineCell(sText, ' ', 4, Value) then
Memo1.Lines[0] := sText else
ShowMessage('#Fehler#2');
{sText := Memo1.Lines[0];
Value := '24';
WriteCsvLineCell(sText, ' ', 10, Value);
Memo1.Lines[0] := sText;}
ShowMessage(IntToStr(CellsInCsvLine(Memo1.Lines[0], ' ')));
end;
CellsInCsvLine gibt die Anzahl der Spalten
ReadCsvLineCell liest eine Zelle aus, gibt False zurück wenn Zelle nicht vorhanden
ReplaceCsvLineCell ersetzt eine Zelle, gibt False zurück wenn Zelle nicht vorhanden
WriteCsvLineCell wie Replace, wenn Zelle fehlt, wird die Zeile um die Anzahl Spalten erweitert
//Edit:
Ich hab den Code gerade vereinfacht, da ich ihn vorher aus einem alten Delphi 3 Code kopiert habe und es da noch kein DelimitedText gab. Hier jetzt also die moderne Version, allerdings erst ab Delphi 6.