Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String auf anderen String überprüfen (https://www.delphipraxis.net/65358-string-auf-anderen-string-ueberpruefen.html)

fLaSh11 15. Mär 2006 16:39


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.

mkinzler 15. Mär 2006 16:40

Re: String auf anderen String überprüfen
 
schau mal nach pos, posex oder StrScan.

himitsu 15. Mär 2006 16:41

Re: String auf anderen String überprüfen
 
POS?


Delphi-Quellcode:
xyz:='hallo';
s:='hallo, peter, wie geht es dir?';
if Pos(xyz, s) <> 0 then JuppIsDrin;
Und wenn die Groß-/Kleinschreibung egal sein soll, dann kan man ja auch die Groß-/Kleinschreibung vorher noch auf ein einheitliches Maß bringen :)
Delphi-Quellcode:
if Pos(AnsiLowerCase(xyz), AnsiLowerCase(s)) <> 0 then JuppIsDrin;

marabu 15. Mär 2006 17:22

Re: String auf anderen String überprüfen
 
In dem Zusammenhang sind vielleicht auch AnsiContainsText() und AnsiContainsStr() interessant.

Grüße vom marabu

fLaSh11 16. Mär 2006 12:52

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?

Luckie 16. Mär 2006 12:58

Re: String auf anderen String überprüfen
 
Auch hier hilft die Delphi Hilfe weiter: Delphi-Referenz durchsuchenStringReplace. Einfach mal in der Hilfe bei den String Routinen gucken.

fLaSh11 16. Mär 2006 13:05

Re: String auf anderen String überprüfen
 
habs selber hinbekommen so:
Delphi-Quellcode:
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;
[edit]Vorteil: Funktioniert auch bei Delphi 3 Pro (StringReplace kennt der wohl nicht!)[/edit]

himitsu 16. Mär 2006 15:27

Re: String auf anderen String überprüfen
 
Code:
if [i][b]Pos(xyz, s) <> 0[/b][/i] then begin
    repeat
        ...
    until [i][b]Pos(xyz, s) = 0[/b][/i];
end;
wie wäre es damit?
Code:
while [i][b]Pos(xyz, s) <> 0[/b][/i] do begin
    ...
end;
Und nein, es ist nicht so gut ... man nehmen dann doch lieber das StringReplace aus der CodeLib.
Also, z.B. xyz:='bla'; und b:='blaa'; ... ich glaub das ergibt 'ne Endlosschleife :shock:

PS:
Delphi-Quellcode:
//+3: je nach length(xyz)
Wie wäre es, wenn man da direkt +length(xyz) hinschreiben würde?

ä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:
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;
PS: 'ne PosEx findet man da ... Code-Library -> Object-Pascal / Delphi-Language -> (Teil)String in anderem String suchen/zählen


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