Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Pos() nur für ganze wörter (https://www.delphipraxis.net/48335-pos-nur-fuer-ganze-woerter.html)

freak1985 23. Jun 2005 19:31


Pos() nur für ganze wörter
 
hi,

kennt jemand eine funktion wie Pos, die aber nur die stelle zurückgibt, wenn es sich um ein einzelnes wort handelt?

also wenn ich mit Pos("blaHALLObla", 'HALLO') suche, findet er ja eine stelle.
aber das soll eine "erweiterte pos funktion" nicht. die sollte das dann aber in solch einem string finden PosExt^^("bla HALLO bla", 'HALLO')


wisst ihr was ich meine?

gibts da was in delphi? wenn nicht, habt ihr einen eleganten ansatz? mir fällt nämlich keiner ein^^

SirThornberry 23. Jun 2005 19:33

Re: Pos() nur für ganze wörter
 
dann musst du eben mit PosEx suchen und prüfen ob vor der fundstelle eine komma, leerzeichen etc. steht, wenn nicht mit posex das näcshte vorkommen suchen etc.

freak1985 23. Jun 2005 19:36

Re: Pos() nur für ganze wörter
 
na gut wenns net anders geht besorg ich mir halt die PosEx. mein D6 Enter hat die PosEx nämlich noch net

svenwel.de 23. Jun 2005 19:36

Re: Pos() nur für ganze wörter
 
ehmm versuch doch mal so :

Delphi-Quellcode:
i:=pos(string,'Suchwort')+Length('Suchwort');
dies dann natürlich noch in die copy() funktion mit reinpacken:

Delphi-Quellcode:
copy(string,pos(string,'Suchwort'),i); ...
und dann halt vergleichen

Sicher nicht die beste lösung aber ne möglichkeit

Grüße
Sven

Airblader 23. Jun 2005 19:37

Re: Pos() nur für ganze wörter
 
Versteh ich an der Frage was falsch, oder dürfte

Delphi-Quellcode:
Pos('Irgendwas HALLO bla', ' HALLO ');
reichen?

air

Phistev 23. Jun 2005 19:40

Re: Pos() nur für ganze wörter
 
Ein weiterer Lösungansatz wären regular expressions.

JasonDX 23. Jun 2005 19:50

Re: Pos() nur für ganze wörter
 
Delphi-Quellcode:
function PosExt(SearchString: string; str: string);
begin
  result := pos(SearchString, str);
  while ind > 0 do
    if ((result = 1)                                 or (not (SearchString[result - 1] in ['A'..'Z', 'a'..'z']))) and
       ((result + length(SearchString) > length(str)) or (not (SearchString[result + length(SearchString)] in ['A'..'Z', 'a'..'z']))) then
      exit
    else begin
      delete(str, 1, length(SearchString));
      result := pos(SearchString, str);
    end;
end;
Der Code ist jetzt mal so heruntergetippt, also ne wahrscheinlichkeit von 25% dass er funktioniert :stupid:
Das Prinzip ist jedenfalls mal, dass man den String mit der Pos-Funktion sucht. Anschließend schaut man, ob das Zeichen davor und danach ein Buchstabe ist. Wenn das beide male nicht der Fall ist, ist es ein einzelstehendes Wort. Damit jedoch nicht beim Suchstring 'haus' und str='nach hause ist im haus' nach dem ersten (fehlgschlagenen versuch 'hause') die funktion 0 zurück gibt geht das ganze in die schleife.
Falls dann das Wort alleine wirklich nie in str enthalten ist, gibt die Funktion 0 zurück


Ich send das jetzt trotzdem mal ab, weil ichs nich um sonst geschrieben haben will :mrgreen:
@Airblader: Bei der Funktion gäbs Probs, wenn nach dem Wort gleich ein . oder was anderes als ein Leerzeichen ist ;)

freak1985 23. Jun 2005 20:19

Re: Pos() nur für ganze wörter
 
danke :)

werds probieren

Flocke 23. Jun 2005 20:52

Re: Pos() nur für ganze wörter
 
... und weil wir in Deutschland sind, nimmst du am besten statt
Delphi-Quellcode:
ch in ['A'..'Z', 'a'..'z']
eine der Funktionen
Delphi-Quellcode:
IsCharAlpha(ch)  oder
IsCharAlphaNumeric(ch)

Hansa 23. Jun 2005 23:26

Re: Pos() nur für ganze wörter
 
...eine der Funktionen
Delphi-Quellcode:
IsCharAlpha(ch)  oder
IsCharAlphaNumeric(ch)
Wo sind denn die ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:24 Uhr.
Seite 1 von 2  1 2      

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