Das ist mein 500'ster Beitrag. Deshalb dachte ich mir, daß mal wieder ein Tip schreiben sollte.
Es gibt ältere Delphi Versionen (z.B. Delphi 3) die kein StringReplace haben. Ich hab es mal für ein Programm gebraucht und hab es deshalb nachprogrammiert. Es ist mit dem StringReplace von Delphi kompatibel. Ich dachte mir, daß es der eine oder andere auch gebrauchen kann.
Da es mit der Delphi Version kompatibel ist, ist auch die Hilfe kompatibel. Deshalb hier die Delphi 5 -Beschreibung als Zitat:
Zitat: |
Beschreibung
Mit StringReplace ersetzen Sie in dem angegebenen String den im Parameter OldPattern festgelegten Sub-String mit dem im Parameter NewPattern übergebenen neuen Sub-String. StringReplace nimmt an, daß der String Multibyte-Zeichen enthalten kann.
Wenn im Parameter Flags nicht rfReplaceAll enthalten ist, wird nur das erste Vorkommen von OldPattern im String S ersetzt. Andernfalls werden alle Instanzen von OldPattern durch NewPattern ersetzt.
Wenn der Parameter Flags rfIgnoreCase enthält, wird die Groß-/Kleinschreibung nicht berücksichtigt. |
Delphi-Quelltext
1: 2:
| type TReplaceFlags = set of (rfReplaceAll, rfIgnoreCase); |
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string; function PosEx(Substr: string; S: string; Flag: TReplaceFlags): Integer; begin if rfIgnoreCase in Flag then Result := Pos(AnsiUpperCase(Substr), AnsiUpperCase(S)) else Result := Pos(Substr, S); end;
var S2: String; begin S2 := S; Result := ''; while Length(S2) > 0 do begin if PosEx(OldPattern, S2, Flags) > 0 then begin Result := Result + Copy(S2, 1, PosEx(OldPattern, S2, Flags) - 1); Delete(S2, 1, PosEx(OldPattern, S2, Flags) + Length(OldPattern) - 1); Result := Result + NewPattern; end else begin Result := Result + S2; Delete(S2, 1, Length(S2)); end; if not (rfReplaceAll in Flags) then begin Result := Result + S2; Delete(S2, 1, Length(S2)); end; end; end; |
Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button1Click(Sender: TObject); var S: String; begin S := 'Das ist Popov und popov und Popov und Ich'; S := StringReplace(S, 'Popov', 'Gugalin', [rfReplaceAll, rfIgnoreCase]); ShowMessage( S ); end; |