Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#2

Re: StringReplace mit Tücken ... Lösung gesucht ...

  Alt 3. Nov 2006, 15:17
Wenn es nicht möglich ist die Reiheinfolge der StringReplace so zu ändern, daß sich gegenseitig keine Beeinträchtigungen ergeben,

dann mußt du wohl selber durch den String gehen und alles manuell ersetzen.
Also alles gleichzeitig und nicht nicht nacheinander.

z.B.:
Delphi-Quellcode:
For i := 1 to Length(S) do
  If Copy(S, i, 2) = #05#18 Then Begin
    Delete(S, i, 1);
    S[i] := #02;
  End Else If Copy(S, i, 2) = #05#19 Then Begin
    Delete(S, i, 1);
    S[i] := #03;
  End Else If Copy(S, i, 2) = #05#21 Then Begin
    Delete(S, i, 1);
    S[i] := #05;
  End;
oder
Delphi-Quellcode:
i1 := Pos(#05#18, S);
i2 := Pos(#05#19, S);
i3 := Pos(#05#21, S);
While (i1 > 0) or (i2 > 0) or (i3 > 0) do
  i = der kleinste Wert(i1,i2,i3) der nicht 0 ist;
  If i = i1 Then ...
  Else If i = i2 Then ...
  Else If i = i3 Then ...
  i1 := PosEx(#05#18, S, i + 1);
  i2 := PosEx(#05#19, S, i + 1);
  i3 := PosEx(#05#21, S, i + 1);
End;
oder
Delphi-Quellcode:
i1 := Pos(#05#18, S); If i1 = 0 Then i1 := MaxInt;
i2 := Pos(#05#19, S); If i2 = 0 Then i2 := MaxInt;
i3 := Pos(#05#21, S); If i3 = 0 Then i3 := MaxInt;
While (i1 <> MaxInt) or (i2 <> MaxInt) or (i3 <> MaxInt) do
  i := Min(i1, Min(i2, i3);
  If i = i1 Then ...
  Else If i = i2 Then ...
  Else If i = i3 Then ...
  i1 := PosEx(#05#18, S, i + 1); If i1 = 0 Then i1 := MaxInt;
  i2 := PosEx(#05#19, S, i + 1); If i2 = 0 Then i2 := MaxInt;
  i3 := PosEx(#05#21, S, i + 1); If i3 = 0 Then i3 := MaxInt;
End;
oder ...

(bei langen Strings werden die Pos/PosEx-Varianten mit Sicherheit schneller sein)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat