(Moderator)
Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
Delphi 2006 Professional
|
Re: Copy Pos Delete - Bin auf dem Holzweg...
17. Jul 2004, 10:59
@Tyler: Die äußere Schleife würde ich zu einer While schleife umformen da es vorkommen kann das im Memo gar nix steht. Ansonsten wäre da nur noch anzumerken das sie ziemlich unperformant ist da ständig hinn und her kopiert wird etc. Ich hab hier mal so ne Function gepostet mit der Bitte das diese auf Performance hinn verbessert wird und rausgekommen ist eine procedure die recht schnell ist
Hier mal die Funktionen:
Delphi-Quellcode:
function splitOutIndex(const Source: String; const Delimiter: String; Index: Integer): String;
var Lcount, Lnumber, LSourceLength, LDelLength, LStart, LEnd: Integer;
begin
LCount := 1;
Lnumber := 0;
if Index = 0 then LStart := 1 else LStart := 0;
LEnd := 0;
result := '';
LSourceLength := length(Source);
LDelLength := length(Delimiter);
while (LCount <= LSourceLength) and (LEnd = 0) do
begin
if copy(Source, LCount, LDelLength) = Delimiter then
begin
inc(LNumber);
if LNumber >= Index then
begin
if LStart = 0 then
LStart := LCount + LDelLength
else
begin
LEnd := LCount;
result := copy(Source, LStart, LEnd - LStart);
end;
end;
Lcount := Lcount + LDelLength;
end else inc(LCount);
end;
if (LStart > 0) and (LEnd = 0) then
result := copy(Source, LStart, LSourceLength - LStart + 1);
end;
procedure splitString(const Source: String; const Delimiter: String; var Dest: TStringlist);
var count: Integer;
LStartpos, LEndepos, LSourcelength: Integer;
LDelimiterLength : Integer;
begin
Dest.Clear;
count := 1;
LStartpos := 0;
LEndepos := 0;
LSourcelength := length(Source);
LDelimiterLength := Length(Delimiter);
while count <= LSourcelength do begin
if copy(Source, count, LDelimiterLength) = Delimiter then begin
LEndepos := count;
dest.Add(copy(Source, LStartpos + 1, LEndepos - LStartpos - 1));
LStartpos := count + LDelimiterLength - 1;
inc(count,LDelimiterLength);
end
else begin
inc(count);
end;
end;
if LEndePos <> Count - LDelimiterLength then
dest.Add(copy(Source, LStartpos + 1, count - LStartpos - 1));
end;
Jens Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
|
|
Zitat
|