hier noch mal die Insertfunktion mit mehr performance, PosEx werd ich mir auch nochmal anschauen
Delphi-Quellcode:
procedure Insert(SubStr: String; var Dest: String; Index: Integer);
var LOldLen, LNewLen, LSubLen: Integer;
begin
LSubLen := Length(SubStr);
LOldLen := Length(Dest);
LNewLen := LSubLen + LOldLen;
SetLength(Dest, LNewLen);
move(Dest[Index], Dest[Index + LSubLen], LSubLen);
move(SubStr[1], Dest[Index], LSubLen);
end;
[Edit]
und hier jetzt noch PosEx
Delphi-Quellcode:
function PosEx(const SubStr, S: string; Offset: Cardinal = 1): Integer;
var LSubStrlen, LCount1, LCount2: Integer;
begin
if Offset = 1 then
result := Pos(SubStr, S)
else begin
LSubStrLen := Length(SubStr);
if LSubStrLen > 0 then
begin
for LCount1 := Offset to Length(S) - LSubStrLen + 1 do
begin
LCount2 := 0;
while (LCount2 < LSubStrLen) and (SubStr[LCount2 + 1] = S[LCount2 + LCount1]) do
inc(LCount2);
if (LCount2 = LSubStrLen) then
begin
result := LCount1;
Exit;
end;
end;
end;
result := -1;
end;
end;
ist fast genau so schnell wie die originale posex von Delphi7. Vorteil dieser Funktion ist, das sie nicht mit einer
AV abbricht wenn man einen leeren Substring übergibt (bei der originalen von D7 ist dies leider der Fall).