Hallo, ich bins mal wieder.
Ich will folgende ein typisiertes dynamisches array von Integer-Werten an ein anderes anhängen.
Allerdings ist meine Funktion rekursiv. ("TIntegerArray" ist deklariert als "array of Integer")
Delphi-Quellcode:
//Diese Funktion soll mir alle Positionen eines SubStrings in einem String zurückliefern.
//Bitte nicht fragen, wieso ich nicht Gebrauch vom "Offset"-Parameter der
//"Pos(...)"-Funktion mache, ich brauche Abwärtskompatibilität bis einschl. D7.
function MultiPos(const SubStr, Str: String; Offset: Integer = 1): TIntegerArray;
var
Temp: PChar;
Position: Integer;
Further: TIntegerArray;
begin
SetLength(Result,0);
if (Offset < 1) or (Offset > (Length(Str) - Length(SubStr))) then
begin
Exit;
end;
Temp := @Str[OffSet];
Position := Pos(SubStr,String(Temp));
if Position <> 0 then
begin
SetLength(Result,1);
Result[0] := Position + Offset - 1;
Inc(Temp,Position + Length(SubStr) - 1);
Further := MultiPos(SubStr,Str,Offset + Position + Length(SubStr) - 1);
if Length(Further) <> 0 then
begin
SetLength(Result,1 + Length(Further));
Move(Further[0],Result[1],SizeOf(Further){Length(Further) - 1});
end;
end;
end;
Wenn ich die Funktion jetzt teste, gibt der mir für die ersten beiden Positionen richtige Werte aus. Für alle anderen jedoch erhalte ich nur noch Nullen. Ich vermute, dass es an relativer Adressierung von arrays liegen könnte, die durch "System.Move(...)" die folgenden Kettenglieder unbrauchbar macht, bin mir aber nicht ganz sicher. Und noch weniger weiß ich, wie ich es beheben sollte.