Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.462 Beiträge
 
Delphi 12 Athens
 
#6

AW: String analysieren und Textteil ersetzen

  Alt 6. Jun 2016, 17:58
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat