Gibt es einen bestimmten Grund, warum Du
Delphi-Quellcode:
procedure ExtractBetween(const aSource, aPrefix, aSuffix : string;
aFindAll : Boolean; aNewPrefix, aNewSuffix : string;
aWords : TStrings);
verwendest und nicht
Delphi-Quellcode:
procedure ExtractBetween(const aSource, aPrefix, aSuffix : string;
const aFindAll : Boolean; const aNewPrefix, aNewSuffix : string;
var aWords : TStrings);
?
Da bei keinem der Parameter eine Wertzuweisung stattfindet, kann man sie ohne Probleme auch alle als Konstanten deklarieren,
mit Ausnahme vom aWords. Der muss als Var-Parameter deklariert werden, da ja dort die Ergebnisse gespeichert werden.
Man könnte das ganze auch noch eleganter mittels
Delphi-Quellcode:
procedure ExtractBetween(const aSource, aPrefix, aSuffix : string;
const aNewPrefix, aNewSuffix : string;
var aWords : TStrings; const aFindAll : Boolean = True);
umsezen. In diesem Fall bräuchte man aFindAll nur dann zu übergeben, wenn nur der erste Treffer zurückgegeben werden soll.
Um das ganze richtig elegant zu machen, würde ich das ganze so umbauen:
Delphi-Quellcode:
function ExtractBetween(const aSource, aPrefix, aSuffix, aNewPrefix, aNewSuffix : string;
const aFindAll : Boolean = True): TStrings;
var
PrefixLength, PosPrefix, PosSuffix, BestPos : Integer;
begin
PosPrefix := PosEx(aPrefix, aSource, 1);
if (PosPrefix > 0) then
begin
PrefixLength := Length (aPrefix);
repeat
PosSuffix := PosEx(aSuffix, aSource, PosPrefix + PrefixLength);
if (PosSuffix > 0) then
begin
while (PosPrefix <> 0) and (PosPrefix < PosSuffix) do
begin
BestPos := PosPrefix;
PosPrefix := PosEx(aPrefix, aSource, PosPrefix + PrefixLength);
end;
Result.Append(
aNewPrefix
+ Copy(aSource, BestPos + PrefixLength, PosSuffix-BestPos - PrefixLength)
+ aNewSuffix
);
end;
until not aFindall or (PosSuffix = 0) or (PosPrefix = 0);
end;
end;
dann kann man sich den Parameter aWords nämlich komplett sparen