Ich will ja nicht pingelig sein, aber das kann schief gehen. Nehmen wir mal an, wir wollen lediglich die Platzhalter
benutzer und
datum austauschen. Gemäß den bisherigen Vorschlägen benutzen wir StringReplace zunächst für
benutzer und dann für
datum. Jetzt bekommen wir aber folgenden Eingangsstring:
#datum#benutzer#benutzer#
Das soll eigentlich dieses Ergebnis liefern: "06.06.2016benutzerUwe, liefert aber "#datumUwebenutzer#".
Klar ist das Beispiel konstruiert, aber je nach tatsächlichen Anforderungen kann durchaus Ähnliches passieren.
Sicherer wäre hier ein ausprogrammierter Simpel-Parser (als Variablenmapping benutze ich einfach eine TStringList):
Delphi-Quellcode:
function ReplaceVariables(const Input: string; VarMap: TStrings): string;
var
M: Integer;
N: Integer;
VarName: string;
begin
Result := Input;
N := Pos('#', Result);
while N > 0 do begin
M := PosEx('#', Result, N + 1);
VarName := Copy(Result, N + 1, M - (N + 1));
Result := StuffString(Result, N, Length(VarName) + 2, VarMap.Values[VarName]);
N := Pos('#', Result);
end;
end;
procedure Main;
var
lst: TStringList;
begin
lst := TStringList.Create;
try
lst.Values['benutzer'] := 'Uwe';
lst.Values['datum'] := '06.06.2016';
Writeln(ReplaceVariables('#datum#benutzer#benutzer#', lst));
finally
lst.Free;
end;
end;