![]() |
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:
Hat jemand eine "bessere" Idee?
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; Thx |
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)
|
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". |
Re: Wort in einem Satz vor einem bestimmten Wort suchen
Thx für die beiden Inputs - habs auf folgenden Code geändert
Delphi-Quellcode:
falls sonst mal jemand braucht
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; |
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!!! |
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
Dieses Thema wurde von "sakura" von "Die Delphi-IDE" nach "Object-Pascal / Delphi-Language" verschoben.
|
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