Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Wort in einem Satz vor einem bestimmten Wort suchen (https://www.delphipraxis.net/80115-wort-einem-satz-vor-einem-bestimmten-wort-suchen.html)

heri 3. Nov 2006 07:48


Wort in einem Satz vor einem bestimmten Wort suchen
 
Wie kann ich am schnellsten ein Wort in einem Satz vor einem bestimmten Wort suchen

mein Code funktioniert zwar - kommt mir aber etwas mühsam vor?
Delphi-Quellcode:
function WordBefore(const S, Word: String): String;
var
i: Integer;
sBuf: String;
begin
//S:     Das ist ein Wort
//Word:  Wort
//Result: ein

  i := pos(Word, S);
  if i>0 then
  begin

    sBuf := Trim(copy(S,1,i-1)); //Das ist ein
    for i := Length(sBuf) downto 0 do
    begin

      if sBuf[i]<>' ' then
         Result := sBuf[i]+Result
      else
         exit;

    end;

  end;

end;
Hat jemand eine "bessere" Idee?
Thx

bttb930 3. Nov 2006 07:53

Re: Wort in einem Satz vor einem bestimmten Wort suchen
 
was ist daran mühsam? einziges problem ist, dass es nicht funktionieren wird. aber sonst okay, vielleicht noch die for-schleife durch repeat ersetzen um das exit zu vermeiden. (wobei da besser break statt exit stehen sollte)

Ralf Kaiser 3. Nov 2006 08:11

Re: Wort in einem Satz vor einem bestimmten Wort suchen
 
Du solltest noch prüfen, ob das gefundene Wort auch wirklich nur das Wort ist:

"In seinem Wortschatz kommt das Wort nicht vor"

Dies würde "seinem" als ergebnis liefern und nicht "das".

heri 3. Nov 2006 09:08

Re: Wort in einem Satz vor einem bestimmten Wort suchen
 
Thx für die beiden Inputs - habs auf folgenden Code geändert
Delphi-Quellcode:
function WordBefore(const S, Word: String): String;
var
i: Integer;
sBuf: String;
begin
//S:     Das ist ein Wort
//Word:  Wort
//Result: ein

  i := pos(' '+Word+' ', S+' ');
  if i>0 then
  begin

    sBuf := Trim(copy(S,1,i-1));
    repeat
       Result := sBuf[i]+Result;
       dec(i);
    until (i=0) OR (sBuf[i]=' ');

  end;

end;
falls sonst mal jemand braucht

c64ranni 3. Nov 2006 09:46

Re: Wort in einem Satz vor einem bestimmten Wort suchen
 
Beim RESULT sollte einen Standardwert gesetzt werden

Du hast allerdings ein Problem, wenn zwischen dem RESULTwort und dem Suchwort 2 Leerzeichen sind, denn dann wirst du ne Zugriffsverletzung bekommen.
Mach das mal mit genau dem Beispiel was du angegeben hast. Da dürfte im sBUF ein zeichen weniger drinnen sein als du am Anfang bei I hast -- Ursache ist das TRIM!!!

Khabarakh 3. Nov 2006 09:57

Re: Wort in einem Satz vor einem bestimmten Wort suchen
 
Es sind auch noch andere Fehler enthalten, die Routine versagt z.B. am Ende des Strings oder bei Tabs statt Leerzeichen. Auch ist das Stringzusammengefüge nicht gerade das Schnellste.
Und kürzer als per Regex wird es wahrscheinlich nicht möglich sein ;) .
Code:
\b(\w+)\s+Wort\b

DP-Maintenance 3. Nov 2006 10:43

DP-Maintenance
 
Dieses Thema wurde von "sakura" von "Die Delphi-IDE" nach "Object-Pascal / Delphi-Language" verschoben.

Ralf Kaiser 3. Nov 2006 11:25

Re: Wort in einem Satz vor einem bestimmten Wort suchen
 
Denk auch daran, daß Worttrenner nicht immer nur Leerzeichen sind! <- Hier war es z.B. das Ausrufezeichen. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 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