![]() |
AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen
Richtig, da steht ja auch Inc(), womit der Zeiger auf das nächste Zeichen gesetzt wird.
|
AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen
Hallo,
p zweigt auf das erste Zeichen in Deinem string, q auf die nächste Fundstelle
Code:
damit ist p > q und die "Distanz" also Anzahl der Zeichen dazwischen q - p.
---------------------------------------------
^ ^ p q Gruß |
AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen
Zitat:
Zitat:
|
AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen
Du kannst das ganze ja auch eine eine "neue" PosExfunktion einzwiebeln
Delphi-Quellcode:
Function PosWholeWord(const find,s:String;Start:Integer=0):Integer;
var p:PChar; begin p := Searchbuf(PChar(s),length(s),Start,0,find,[soWholeWord,soDown]); if assigned(p) then Result := Integer( p - PChar(s)) + 1 else Result := 0; end; |
AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen
Habs jetzt so gelöst:
Delphi-Quellcode:
Offset := 1;
repeat P := SearchBuf(PWideChar(Zeile), max_Ende, 0, Offset, SuchText, StringSearchOptions); If Assigned(P) then begin akt_Pos := P - PWideChar(Zeile); inc(Result); Offset := akt_Pos + 1; end else begin akt_Pos := 0; end; until akt_Pos = 0; end; |
AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen
jetzt muss ich das Thema aus der Versenkung holen...
Bei SearchBuf hab ich leider folgendes festgestellt: Suche ich mit der Option "soWholeWord" so wird nur das ganze Wort gefunden Leider aber auch wenn zuvor oder danach ein Unterstrich vorhanden ist. Z. B.: Suchtext "hallo" dann wird auch "_hallo_" gefunden - oder sogar bei "_hallo_du_da" Wie kann ich dem SearchBuf beibringen, dass er den Unterstrich nicht als Worttrenner nutzen soll? Eine Möglichkeit wäre, nach SearchBuf prüfen, ob vor dem Suchtext und nach dem Suchtext ein Unterstrich ist - aber gefallen tut mir das nicht Hab da auf die Schnelle mal etwas zusammengeschustert, aber schön ist es trotzdem nicht:
Delphi-Quellcode:
//Variablen vordefinieren
Offset := 0; repeat //Suchtext ab "Offset" suchen P := SearchBuf(PWideChar(Zeile), max_Ende, 0, Offset, SuchText, StringSearchOptions); //Offset nullen (falls P = nil ist) Offset := 0; //wenn der Suchtext gefunden wurde... If Assigned(P) then begin //Offset ermitteln (Pointer Suchwort - Pointer der Zeile) + 1 Offset := (P - PWideChar(Zeile)) + 1; i := Offset - 1; If i >= 0 then If (Zeile[i] = '_') then Offset := 0; i := Offset + length(SuchText); If i <= length(Zeile) then If (Zeile[i] = '_') then Offset := 0; If Offset <> 0 then //Anzahl hochzählen inc(Result); end; until Offset = 0; |
AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen
Hi,
auf Searchbuf würde ich ganz verzichten, bei meinen Tests ist das mindesten 4 mal langsamer als die Standard PosEx Funktion (bzw. der Code unten). Wie wäre es so:
Delphi-Quellcode:
Mfg
function CountWordsStdWhole(const SearchFor, SearchIn: String): Integer;
var i: integer; begin i := 1; Result := 0; repeat i := PosEx(SearchFor, SearchIn, i) + 1; if (i > 1) and (SearchIn[i-2] in [' ',#0,'.',',',#13,#10]) and (SearchIn[i+Length(SearchFor)-1] in [' ',#0,'.',',',#13,#10]) then Inc(Result) else exit; until False; end; |
AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen
Danke für den Code, aber ich nutz mehr als nur das "ganze Wort suchen" bei SearchBuf
und von daher möchte ich gern dabei bleiben |
AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen
Zitat:
Der Whitespace ist für die Ansi-Version
Delphi-Quellcode:
wie folgt definiert
SearchBuf
Delphi-Quellcode:
bzw. für die Unicode-Version wird
const
{ Default word delimiters are any character except the core alphanumerics. } WordDelimiters: set of Byte = [0..255] - [Ord('a')..Ord('z'), Ord('A')..Ord('Z'), Ord('1')..Ord('9'), Ord('0')];
Delphi-Quellcode:
bemüht.
TCharHelper.IsLetterOrDigit
Also wirst du wohl deine eigene SearchBuf Routine schreiben müssen |
AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen
Hallo jaenicke und TReader,
vielen Dank für eure Antworten. Ich habe inzwischen die Ursache gefunden: Es lag an der Benutzerkontensteuerung. Der vom OS vorgegebene Wert verhinderte, dass der Alias, wo auch immer, gespeichert werden konnte. Für manche Dinge war er da, für die Entwicklungsumgebung nicht ... Jetzt kann ich mir wieder Gedanken wegen der Datenbank machen. Beste Grüße von French, in Kürze wieder in der Provence |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:54 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