@DataCool: Nix gegen dich persönlich aber deine Funktion ist ziemlich unperformant da du mit copy ständig nen riesen string neu zusammensetzt... Von der Performance her sollte folgende Procedure um einiges besser sein..
Delphi-Quellcode:
procedure splitString(const Source: String; const Delimiter: String; var Dest: TStringlist);
var count: Integer;
LStartpos, LEndepos, LSourcelength: Integer;
begin
Dest.Clear;
count := 1;
LStartpos := 0;
LEndepos := 0;
LSourcelength := length(Source);
while count <= LSourcelength do
begin
if copy(Source, count, length(Delimiter)) = Delimiter then
begin
LEndepos := count;
dest.Add(copy(Source, LStartpos + 1, LEndepos - LStartpos - 1));
LStartpos := count + length(Delimiter) - 1;
count := count + length(Delimiter);
end else begin
count := count + 1;
end;
end;
if LEndePos <> Count - length(Delimiter) then
dest.Add(copy(Source, LStartpos + 1, count - LStartpos - 1));
end;
Hab eben noch nen kleinen Test durchgeführt. Meine Funktion brauchte für einen kleinen String von 10 MB (jedes vierte zeichen ein Delimiter) zwischen 7 und 8 Sekunden. Die Funktion von Datacool wurde jedesmal nach ca 13 Sekunden mit dem Fehler "Out of Memory" beendet. Keine Ahnung wann bei meiner Funktion so eine Meldung kommmt. Den größten String den ich bisher damit zerlegt hab war ein etwa 50 MB großer String (Datenbank-Tabellen-Abbild)