Autor Beitrag
Gast
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mi 08.01.03 22:57 
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.

ausblenden Delphi-Quelltext
1:
2:
type  
  TReplaceFlags = set of (rfReplaceAll, rfIgnoreCase);  //Wichtig!!! Global setzen


ausblenden volle Höhe Delphi-Quelltext
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;
  //type  
  //  TReplaceFlags = set of (rfReplaceAll, rfIgnoreCase); //Wichtig!!! Global setzen

  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{Popov}


Beispiel:

ausblenden 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;