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
Benutzerbild von Helmi
Helmi

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

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

  Alt 26. Jan 2013, 22:14
Weil das Ergebnis dann negativ würde?
Ja, aber warum?
Sorry - ich bin mit Zeigern nicht so bewandert

Meine Erklärung wäre, weil die Anfangsadresse des Textes kleiner ist, als die Adresse des 1. Suchbegriffes
??
mfg
Helmi

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

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#2

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
Benutzerbild von Helmi
Helmi

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

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
 
#4

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.344 Beiträge
 
Delphi XE2 Professional
 
#5

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.344 Beiträge
 
Delphi XE2 Professional
 
#6

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
 
#7

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
Antwort Antwort


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 18:22 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