Registriert seit: 6. Dez 2012
Ort: Nürnberg
103 Beiträge
Delphi 10.1 Berlin Starter
|
AW: Escape sequenzen ersetzen
8. Apr 2016, 15:05
Was ist deine Frage?
Magst du was hilfreiches von uns sehen?
Zum Bsp. mit Rekursion:
Delphi-Quellcode:
// <XYZ> wird ersetzt durch WideChar(XYZ) wenn zum einen die Kombination "<" + "XYZ" + ">" gefunden wird und zum anderen sich "XYZ" in einen Integer umwandeln lässt.
function ParseLiteralsW(AInputString : WideString) : WideString;
function WideStrCopy(ASourceString : WideString; AIndex : Cardinal; ALength : Cardinal) : WideString;
var
len : Cardinal;
indx : Cardinal;
begin
len:=Length(ASourceString);
if (AIndex>len) or (ALength=0) then
begin
Result := '';
exit;
end;
if AIndex=0 then indx:=1
else indx:=AIndex;
if (indx+ALength) > len then
begin
SetLength(Result,len-indx+1);
Move(ASourceString[indx],Result[1],(len-indx+1)*SizeOf(WideChar));
end else begin
SetLength(Result,ALength);
Move(ASourceString[indx],Result[1],(ALength)*SizeOf(WideChar));
end;
end;
Function PosExW(SubStr: WideString; S: WideString; Offset : Longint = 1): LongInt;
Begin
if Length(SubStr)<=Length(S) then
begin
Result := Offset;
While Length(SubStr) + Result - 1 <= Length(S) do
Begin
If CompareMem(@SubStr[1], @S[Result], Length(SubStr) shl 1) Then Exit;
Inc(Result);
End;
End;
Result := 0;
End;
var
p1,p2 : Integer;
tmpword : Word;
tmpw : WideString;
begin
Result:=AInputString;
p1:=1;
p2:=1;
p1:= PosExW('<',AInputString,p1);
p2:= PosExW('>',AInputString,p2);
if (p1>0) and (p2>0) and (p2>p1+1) then begin
Try
tmpword:=StrToInt(WideStrCopy(AInputString,p1+1,p2-p1-1));
if (tmpword>0) and (tmpword<=MaxWord) then begin
tmpw:=WideStrCopy(AInputString,1,p1-1)+WideChar(tmpword)+WideStrCopy(AInputString,p2+1,Length(AInputString)-p2);
Result := ParseLiteralsW(tmpw);
end;
except
End;
end;
end;
Zwischenzeitlich kam noch mal dein Beitrag, bis ich einen Fehler gefunden habe. Gut dass es bei dir klappt. Schönes Wochenende!
Chris
|
|
Zitat
|