Also, da es in dem ersten Code eh keine ShortStrings gab, hätten eine kleine Änderung alles gelöst.
In dieser Zeile entweder die 255 entfernen, also durch
Length(H) - t, oder da Copy eh die Länge nochmal überprüft/anpasst auch Length(H), oder einfach nur
MaxInt.
H := copy(H,t+1,255); // Reststring
Oder ganz einfach, warum Copy, wenn ein Delete eh besser wärde
(also einfach die Zeile durch folgende erstetzt und fertsch)
Delete(H, 1, t); // Reststring
PS: da SText eh nicht als const/var definiert ist, kann ja auch gleich damit gearbeitet werden, dezu war S eh nicht nätig, also wie gefällt dir dann das?
Delphi-Quellcode:
function Zerlege(SText: String): TStrings;
var t: Integer;
begin
Result := TStringList.Create;
// Baue Stringliste auf
while length(SText) > 0 do
begin
t := Pos(';' , SText);
if t > 0 then
begin
Result.Add(Copy(SText, 1, t - 1));
Delete(SText, 1, t);
end
else
Result.Add(SText);
end;
end;
Oder mal ohne den String zu verändern ...
Delphi-Quellcode:
function Zerlege(const SText: String): TStrings;
var t, t2: Integer;
begin
Result := TStringList.Create;
// Baue Stringliste auf
t := 1;
while length(SText) > 0 do
begin
t2 := PosEx(';' , SText, t + 1);
if t2 = 0 then t2 := length(SText) + 1;
Result.Add(Copy(SText, t + 1, t2 - t - 1));
t := t2;
end;
end;
Ich weiß, PosEx gibt's noch nicht, aber in der CodeLib hab'sch dafür ja den Ersatz hinterlegt
Oder ganz einfach:
wenn dir
der Code von Der_Unwissende nicht gefällt:
Delphi-Quellcode:
function Zerlege(const SText: String): TStrings;
begin
Result := TStringList.Create;
Result.Lines.Text := StringReplace(SText, ';', #13#10, [rfReplaceAll]);
end;