Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   mehrere Tokens aus string löschen (https://www.delphipraxis.net/54660-mehrere-tokens-aus-string-loeschen.html)

sniper_w 9. Okt 2005 11:08


mehrere Tokens aus string löschen
 
Delphi-Quellcode:
procedure ReplaceStr(var ToReplace:string; const strout,strin:string);
  var p:integer;
begin
  p := Pos(strout, ToReplace);
  //if p<>0 then
  while p<>0 do
  begin
    Delete(ToReplace, p, Length( strout ) );
    Insert(strin, ToReplace, p);
    //ReplaceStr(ToReplace, strout, strin);
    p := Pos(strout, ToReplace);
  end;
end;
Dies ist eine Procedur die nicht funktioniert...warum, weiss ich nicht. Was ich erreichen will ist folgendes:
Delphi-Quellcode:
Anfangsstring := 'jh sj ebnjbfu hhh sdhweh sdfhhhs jhe hjhhh';
ReplaceStr(Anfangsstring, 'hhh, 'X');
//jetzt sieht mein string so aus
Anfangsstring := 'jh sj ebnjbfu X sdhweh sdfXs jhe hjX';
Was mache ich falsch ?

Ultimator 9. Okt 2005 11:13

Re: mehrere Tokens aus string löschen
 
Klappt bei mir aber :gruebel:

marabu 9. Okt 2005 11:45

Re: mehrere Tokens aus string löschen
 
Ich würde eine Lösung auf Basis von PosEx() vorziehen, da ansonsten eine nicht endende Rekursion auftreten kann - bereits veränderter Text soll ja nicht erneut betrachtet werden...

Grüße vom marabu

sniper_w 9. Okt 2005 13:08

Re: mehrere Tokens aus string löschen
 
Und wo soll PosEx sein ?

[Error] Undeclared idetifier : 'PosEx'

Khabarakh 9. Okt 2005 13:19

Re: mehrere Tokens aus string löschen
 
In allen Delphi-Versionen ab 7 ^^ .

sniper_w 9. Okt 2005 13:32

Re: mehrere Tokens aus string löschen
 
Ich habe aber Delphi 6...
Meine Lösung (nicht schön aber geht...für meine Zwecke reicht) :
Delphi-Quellcode:
procedure ReplaceStr(var ToReplace:string; const strout,strin:string);
  var p :integer;
      before, after:string;
begin
  before := '';
  after := ToReplace;
  p := Pos(strout, after);
  while p<>0 do
  begin
    before := before + Copy(after,1,p-1) + strin;
    after := Copy(after, p+Length(strout), length(after) - p+Length(strout) );
    p := Pos(strout, after);
  end;
  ToReplace := before+after;
end;

marabu 9. Okt 2005 13:48

Re: mehrere Tokens aus string löschen
 
Zitat:

Zitat von sniper_w
Und wo soll PosEx sein ?

Tut mir leid, ich hatte D6 in deinem Profil übersehen. Wenn du es je brauchen solltest:

Delphi-Quellcode:
function PosEx(const SubStr, S: string; Offset: integer): integer;
begin
  Result := Pos(SubStr, Copy(S, OffSet, Succ(Length(S) - OffSet)));
  if Result > 0 then Result := Result + Pred(Offset);
end;
Zu finden war es auch mit PosEx als Suchwort hier in der DP. Aber du hast ja jetzt eine Lösung - und sogar ohne die Rekursionsfalle. Schönen Sonntag noch.

marabu

ripper8472 9. Okt 2005 13:56

Re: mehrere Tokens aus string löschen
 
delphi (ab 5) hat standardmaessig stringersetzungsfunktionen. wieso benutzt du die nicht??

sniper_w 9. Okt 2005 15:09

Re: mehrere Tokens aus string löschen
 
Welche denn ?

x000x 9. Okt 2005 15:22

Re: mehrere Tokens aus string löschen
 
Moin moin,
wie wäre es mit StringReplace (SysUtils)?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz