bis jetzt hatte ich das auch immer so gemacht wie Uwe es gezeigt hat. Dafür habe ich mir die original System.Classes.pas in den entsprechenden Projektordner kopiert und diese
Unit dann angepasst.
Das habe ich aber nicht so gemeint! Das würde ja bedeuten, daß sich dann alle
TStringList
im Projekt so verhalten. Eventuell muss man ja auch unterschiedliche
CSV-Dateien mit anderen abstrusen Konventionen einlesen können. Für den konkreten Anwendungsfall hatte ich mir eher etwas wie dieses vorgestellt:
Delphi-Quellcode:
type
TSoftBreakStringList = class(TStringList)
protected
procedure SetTextStr(const Value: string); override;
end;
procedure TSoftBreakStringList.SetTextStr(const Value: string);
var
P, Start: PChar;
S: string;
begin
if CompareStr(LineBreak, sLineBreak) <> 0 then begin
inherited;
Exit;
end;
BeginUpdate;
try
Clear;
P := Pointer(Value);
if P <> nil then begin
while P^ <> #0 do begin
Start := P;
while not (P^ in [#0, #13]) do Inc(P);
SetString(S, Start, P - Start);
Add(S);
if P^ = #13 then Inc(P);
if P^ = #10 then Inc(P);
end;
end;
finally
EndUpdate;
end;
end;
Zur Info: Das Einlesen der Datei funktioniert auch mit dieser Variante, nur hat man danach natürlich keine Möglichkeit mehr, die Softbreaks, z.B. bei einem importierten Text für ein mehrzeiliges Memofeld zu setzen (da ja alle #10 beim Einlesen übergangen werden).