Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen (https://www.delphipraxis.net/172877-suchbegriff-als-ganzes-wort-innerhalb-eines-textes-suchen.html)

Helmi 26. Jan 2013 20:40


Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen
 
Hallo,

mittels folgendem Code ermittle ich die Anzahl eines Suchbegriffes innerhalb eines Textes.

Delphi-Quellcode:
  Offset := 1;

  max_Ende := length(Zeile);

  repeat
    akt_Pos := PosEx(SuchText, Zeile, Offset);

    If akt_Pos > 0 then
      begin
        If akt_Pos <= max_Ende then
          inc(Result);

        Offset := akt_Pos + 1;
      end;
  until akt_Pos = 0;
end;
Damit wird aber z. B. der Suchbegriff "und" auch in "Kunde" gefunden.
Wie kann ich eine Suche nach "ganzem Wort" realisieren?
Wichtig ist hierbei, dass alle Vorkommen innerhalb des Textes gezählt werden sollen.

DeddyH 26. Jan 2013 21:00

AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen
 
Du musst eben jeden Treffer noch weiter analysieren. Davor und dahinter sind dann je nach Definition eines ganzen Wortes eben nur Leer- und Satzzeichen oder Zeilenumbrüche erlaubt. Außerdem musst Du noch schauen, ob es sich evtl. um den Textanfang oder das Textende handelt.

bernerbaer 26. Jan 2013 21:01

AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen
 
Vielleicht ist ja StrUtils.SearchBuf das was Du suchst (Options: soWholeWord)

Helmi 26. Jan 2013 21:10

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

Zitat von bernerbaer (Beitrag 1200747)
Vielleicht ist ja StrUtils.SearchBuf das was Du suchst (Options: soWholeWord)

SearchBuf kannte ich schon - aber das liefert nur das erste Vorkommen - ich müsste es dann immer wieder aufrufen um alle Vorkommen zu finden, aber dann vermute ich, dass es sehr langsam wird

bernerbaer 26. Jan 2013 21:20

AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen
 
Dann würden sich wohl noch die Verwendung von regulären Ausdrücken anbieten, ob das aber schneller ist als mit "searchbuf" wäre noch zu überprüfen.

Helmi 26. Jan 2013 21:46

AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen
 
Ich hab SearchBuf ausprobiert und es schaut ganz gut aus
nur wie kann ich jetzt feststellen welche Position der gefundene Zeiger im Text hat?

Zitat:

Zitat von Hilfe
Wenn die Suche erfolgreich war, gibt SearchBuf einen Zeiger auf das erste Zeichen der Fundstelle in Buf zurück. Andernfalls wird nil (Delphi) bzw. NULL (C++) zurückgegeben.


Volker Z. 26. Jan 2013 22:04

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

versuch mal folgendes (auf Deine Problemstellung anzupassen):
Delphi-Quellcode:
procedure TForm4.Button2Click(Sender: TObject);
var
  c, i, l : Integer;
  p, q   : PAnsiChar;
  s      : Integer;
begin
  c := 0;
  i := 1;
  s := 'und';
  l := Length (Memo1.Lines.Text);
  p := PAnsiChar (Memo1.Lines.Text);
  q := SearchBuf (p, l, i, i, s, [soDown, soWholeWord]);

  while q <> nil do
    begin
      Inc (c);
      i := q - p;
      q := SearchBuf (p, l, i, i, s, [soDown, soWholeWord]);
    end
end;
Gruß

Helmi 26. Jan 2013 22:09

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

Zitat von Volker Z. (Beitrag 1200761)
Hallo,

versuch mal folgendes (auf Deine Problemstellung anzupassen):
Delphi-Quellcode:
procedure TForm4.Button2Click(Sender: TObject);
var
  c, i, l : Integer;
  p, q   : PAnsiChar;
  s      : Integer;
begin
  c := 0;
  i := 1;
  s := 'und';
  l := Length (Memo1.Lines.Text);
  p := PAnsiChar (Memo1.Lines.Text);
  q := SearchBuf (p, l, i, i, s, [soDown, soWholeWord]);

  while q <> nil do
    begin
      Inc (c);
      i := q - p;
      q := SearchBuf (p, l, i, i, s, [soDown, soWholeWord]);
    end
end;
Gruß

Danke für den Code - hab jetzt in der Zwischenzeit auch die Zeile
Delphi-Quellcode:
i := q - p;
raugefunden.

Aber warum muss es
Delphi-Quellcode:
i := q - p;
lauten und nicht
Delphi-Quellcode:
i := p - q;
?

DeddyH 26. Jan 2013 22:12

AW: Suchbegriff als "ganzes Wort" innerhalb eines Textes suchen
 
Weil das Ergebnis dann negativ würde?

Helmi 26. Jan 2013 22:14

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

Zitat von DeddyH (Beitrag 1200764)
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
??


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 Uhr.
Seite 1 von 3  1 23      

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