AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen
Thema durchsuchen
Ansicht
Themen-Optionen

Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen

Ein Thema von Helmi · begonnen am 26. Jan 2013 · letzter Beitrag vom 22. Jun 2013
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen

  Alt 26. Jan 2013, 22:15
Richtig, da steht ja auch Inc(), womit der Zeiger auf das nächste Zeichen gesetzt wird.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#12

AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen

  Alt 26. Jan 2013, 22:16
Hallo,

p zweigt auf das erste Zeichen in Deinem string, q auf die nächste Fundstelle

Code:
---------------------------------------------
^                         ^
p                         q
damit ist p > q und die "Distanz" also Anzahl der Zeichen dazwischen q - p.

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#13

AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen

  Alt 26. Jan 2013, 22:19
Richtig, da steht ja auch Inc(), womit der Zeiger auf das nächste Zeichen gesetzt wird.
Hallo,

p zweigt auf das erste Zeichen in Deinem string, q auf die nächste Fundstelle

Code:
---------------------------------------------
^                         ^
p                         q
damit ist p > q und die "Distanz" also Anzahl der Zeichen dazwischen q - p.

Gruß
Danke für die Erklärungen - ich sollte doch mal mehr mit Zeigern (in Delphi) arbeiten...
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#14

AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen

  Alt 26. Jan 2013, 22:21
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#15

AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen

  Alt 26. Jan 2013, 22:37
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;
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#16

AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen

  Alt 21. Jun 2013, 17:28
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;
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<

Geändert von Helmi (21. Jun 2013 um 17:54 Uhr)
  Mit Zitat antworten Zitat
Ginko

Registriert seit: 30. Aug 2008
208 Beiträge
 
FreePascal / Lazarus
 
#17

AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen

  Alt 21. Jun 2013, 21:06
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:
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;
Mfg

Geändert von Ginko (21. Jun 2013 um 21:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#18

AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen

  Alt 21. Jun 2013, 21:11
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
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#19

AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen

  Alt 22. Jun 2013, 09:23
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
Das wird aber nicht machbar sein, denn jede Suchroutine die ganze Wörter erkennen soll, muss wissen, was zu einem Wort gehört und was nicht (Whitespace).

Der Whitespace ist für die Ansi-Version SearchBuf wie folgt definiert
Delphi-Quellcode:
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')];
bzw. für die Unicode-Version wird TCharHelper.IsLetterOrDigit bemüht.

Also wirst du wohl deine eigene SearchBuf Routine schreiben müssen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
hberdel

Registriert seit: 1. Feb 2003
Ort: Darmstadt, Provence, Südspanien
31 Beiträge
 
Delphi XE5 Professional
 
#20

AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen

  Alt 22. Jun 2013, 11:46
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz