![]() |
String auf anderen String überprüfen
hallo,
einfache Frage: wie kann ich überprüfen, ob der String xyz im String s enthalten ist? :gruebel: (z.B. wenn xyz:='hallo' und s:='hallo, peter, wie geht es dir?') :stupid: Danke im Vorraus für eure Antworten. |
Re: String auf anderen String überprüfen
schau mal nach pos, posex oder StrScan.
|
Re: String auf anderen String überprüfen
POS?
Delphi-Quellcode:
Und wenn die Groß-/Kleinschreibung egal sein soll, dann kan man ja auch die Groß-/Kleinschreibung vorher noch auf ein einheitliches Maß bringen :)
xyz:='hallo';
s:='hallo, peter, wie geht es dir?'; if Pos(xyz, s) <> 0 then JuppIsDrin;
Delphi-Quellcode:
if Pos(AnsiLowerCase(xyz), AnsiLowerCase(s)) <> 0 then JuppIsDrin;
|
Re: String auf anderen String überprüfen
In dem Zusammenhang sind vielleicht auch AnsiContainsText() und AnsiContainsStr() interessant.
Grüße vom marabu |
Re: String auf anderen String überprüfen
Danke himitsu, das isses!
kann mir jetzt noch jemand sagen, wie ich diesen String xyz in s, so oft er vorkommt, eliminieren kann und ihn durch einen anderen String b ersetzen kann? |
Re: String auf anderen String überprüfen
Auch hier hilft die Delphi Hilfe weiter:
![]() |
Re: String auf anderen String überprüfen
habs selber hinbekommen so:
Delphi-Quellcode:
[edit]Vorteil: Funktioniert auch bei Delphi 3 Pro (StringReplace kennt der wohl nicht!)[/edit]
s:='bla bla bla bla';
xyz:='bla'; b:='muh sagt die kuh'; if Pos(xyz, s) <> 0 then begin repeat s1:=copy(s,0,pos(xyz,s)-1); s2:=copy(s,pos(xyz,s)+3,length(s)); //+3: je nach length(xyz) s:=s1+b+s2; until Pos(xyz, s) = 0; end; |
Re: String auf anderen String überprüfen
Code:
wie wäre es damit?
if [i][b]Pos(xyz, s) <> 0[/b][/i] then begin
repeat ... until [i][b]Pos(xyz, s) = 0[/b][/i]; end;
Code:
Und nein, es ist nicht so gut ... man nehmen dann doch lieber das StringReplace aus der CodeLib.
while [i][b]Pos(xyz, s) <> 0[/b][/i] do begin
... end; Also, z.B. xyz:='bla'; und b:='blaa'; ... ich glaub das ergibt 'ne Endlosschleife :shock: PS:
Delphi-Quellcode:
Wie wäre es, wenn man da direkt +length(xyz) hinschreiben würde?
//+3: je nach length(xyz)
ähhh ... copy(s,0, ... du weißt aber, daß Strings mit dem Index 1 beginnen? Und wenn du es schon direkt imEingangsstring ersetzten möchtest, dann solltest du entweder mit PosEx (wobei, das gibt's in D3 ja auch nicht) arbeiten und dann jedesmal hinter dem eingesetzten String weitersuchen, oder von hinten nach vorne die xyz's ersetzen.
Delphi-Quellcode:
PS: 'ne PosEx findet man da ... Code-Library -> Object-Pascal / Delphi-Language ->
s :='bla bla bla bla';
a :='bla'; b :='muh sagt die kuh'; i := Pos(a, s); while i > 0 do begin s := copy(s, 1, i - 1) + b + copy(s, i + length(a), length(s)); i := PosEx(a, s, i + length(b)); //alternativ für die Zeile mit PosEx geht auch folgendes, nach marabu in //http://www.delphipraxis.net/topic66582_alternative+zu+posex+und+insert.html // i2 := i + length(b); // i := Pos(a, Copy(s, i2, Length(s) - i2 + 1)); // if i > 0 then inc(i, i2 - 1); end; ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz