Hi Lotus,
vielleicht hilft es Dir:
Delphi-Quellcode:
type
TCharArray = array of Char;
TByteArray = array of Byte;
function Kill(const Kill:Char;const StrArr:TCharArray):TCharArray;
var
i,Count : Word;
ToKill : Byte;
tempByteArr : TByteArray absolute StrArr;
begin
ToKill := ORD(Kill);
Count := 0;
for i := Low(StrArr) to High(StrArr)
do begin
if (tempByteArr[i]<>ToKill)
then begin
INC(Count);
SetLength(result,Count);
result[count-1] := StrArr[i];
end;
end;
end;
function KillAndFill(const Kill,Fill:Char;const StrArr:TCharArray):TCharArray;
var
i : Word;
ToKill : Byte;
tempByteArr : TByteArray absolute StrArr;
begin
ToKill := ORD(Kill);
SetLength(result,High(StrArr)+1);
for i := Low(StrArr) to High(StrArr)
do begin
if (tempByteArr[i]<>ToKill)
then result[i] := StrArr[i]
else result[i] := Fill;
end;
end;
Frage vorweggenommen:
tempByteArr : TByteArray absolute StrArr zeigt auf den gleichen Bereich im Speicher, wie auch
const StrArr:TCharArray. Die vergleichsoperation
(tempByteArr[i]<>ToKill) wird vom Compiler (da jetzt ein definierter Byte-Vergleich) viel effizenter umgesetzt. Kann bei vielen aufrufen der Funktion von Vorteil sein.
Kill : Loescht und gibt ein kuerzeres Array zurueck.
KillAndFill : Ersetzt.