Registriert seit: 6. Dez 2012
Ort: Nürnberg
103 Beiträge
Delphi 10.1 Berlin Starter
|
AW: Escape sequenzen ersetzen
11. Apr 2016, 15:56
Aller Guten Dinge sind drei:
Delphi-Quellcode:
function ParseLiteralsW(AInputString : WideString) : WideString;
var
p1,p2 : Integer;
tmpInt : Integer;
tmpw : WideString;
begin
Result:=AInputString;
p1:= PosExW('<',AInputString);
p2:= PosExW('>',AInputString);
if (p1>0) and (p2>0) and (p2>p1+1) then
begin
//Zweig: Mutmaßliche Escape Sequenz "<X>" vorhanden
if TryStrToInt(WideStrCopy(AInputString,p1+1,p2-p1-1),tmpInt) then
begin
//Zweig: TryStrToInt liefert Integer
if (tmpInt>=0) and (tmpInt<=MaxWord) then
begin
//Zweig: tmpInt liegt in gültigem Intervall
tmpw:=WideStrCopy(AInputString,1,p1-1)+WideChar(tmpInt)+ ParseLiteralsW(WideStrCopy(AInputString,p2+1,Length(AInputString)-p2));
Result := tmpw;
end else
begin
//Zweig: tmpInt liegt nicht in gültigem Intervall --> prüfe ob dahinter noch etwas geparsed werden soll
tmpw:=WideStrCopy(AInputString,1,p2)+ParseLiteralsW(WideStrCopy(AInputString,p2+1,Length(AInputString)-p2));
Result := tmpw;
end;
end else
begin
//Zweig: TryStrToInt liefert keinen Integer --> prüfe ob dahinter noch etwas geparsed werden soll
tmpw:=WideStrCopy(AInputString,1,p2)+ParseLiteralsW(WideStrCopy(AInputString,p2+1,Length(AInputString)-p2));
Result := tmpw;
end;
end else if (Length(AInputString)-p2>3) and (p2>0) and (p1>0) then
begin
//Zweig: Leere Sequenz "<>" --> prüfe ob dahinter noch etwas geparsed werden soll wenn noch mindestens 3 Zeichen danach kommen
tmpw:=WideStrCopy(AInputString,1,p2)+ParseLiteralsW(WideStrCopy(AInputString,p2+1,Length(AInputString)-p2));
Result := tmpw;
end;
end;
Eingabe: <><abc>abc<32>def<60>ghi<70000><>
Ausgabe: <><abc>abc def<ghi<70000><>
Jetzt habe ich hoffentlich alle Klarheiten beseitigt (-es ist etwas unübersichtlicher als vorher-)
Danke für die Anregung!
Chris
Geändert von Photoner (11. Apr 2016 um 15:57 Uhr)
Grund: Dankeschön vergessen
|
|
Zitat
|