Einzelnen Beitrag anzeigen

Photoner

Registriert seit: 6. Dez 2012
Ort: Nürnberg
103 Beiträge
 
Delphi 10.1 Berlin Starter
 
#17

AW: Escape sequenzen ersetzen

  Alt 11. Apr 2016, 14: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 14:57 Uhr) Grund: Dankeschön vergessen
  Mit Zitat antworten Zitat