AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Nur ganze Wörter finden

Ein Thema von Luckie · begonnen am 8. Aug 2004 · letzter Beitrag vom 9. Aug 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Nur ganze Wörter finden

  Alt 8. Aug 2004, 18:13
Ich habe hier eine Funktion die einen SubString in einem String sucht und den Index des ersten Zeichens zurückgibt:
Delphi-Quellcode:
function Find(StartPos: Integer; const Text, Word: string; WholeWordsOnly:
  Boolean = False): Integer;
var
  Index: Integer;
begin
  if WholeWordsOnly then
  begin
    Index := (PosEx(AnsiUppercase(Word), AnsiUpperCase(Text), StartPos)) - 1;
    if Text[Index + length(Word) + 1] in WordDelimiter then
      result := Index
    else
      result := -1;
  end
  else
    result := (PosEx(AnsiUppercase(Word), AnsiUpperCase(Text), StartPos)) - 1;
end;
Nun wollte ich sie so erweitern, dass man optional nur nach ganzen Wörten suchen kann. Leider ist da irgendwo noch ein Bug drinne. Er bricht einfach mitten drinne ab und findet keine Wörter mehr, obwohl noch ganze Wörter zu finden wären.

Einsetzten wollte ich das hier:
Delphi-Quellcode:
function HighlightWords(RichEdit: TRichEdit; Words: TStrings; FontStyle:
  TFontStyles;
  Color: TColor): Cardinal;
var
  i: Integer;
  LastWordPos: Integer;
  HighLightedWords: Cardinal;
begin
  LastWordPos := 0;
  HighLightedWords := 0;
  RichEdit.Lines.BeginUpdate;
  for i := 0 to Words.Count - 1 do
  begin
    while LastWordPos <> 1 do
    begin
      LastWordPos := Find(LastWordPos, RichEdit.Text, Words[i]);
      writeln(Words[i] + ': ' + IntToStr(LastWordPos));
      RichEdit.SelStart := LastWordPos;
      RichEdit.SelLength := length(Words[i]);
      RichEdit.SelAttributes.Color := Color;
      RichEdit.SelAttributes.Style := FontStyle;
      LastWordPos := LastWordPos + 2;
      Inc(HighLightedWords);
    end;
    LastWordPos := 0;
  end;
  RichEdit.SelStart := 0;
  RichEdit.Lines.EndUpdate;
  result := HighLightedWords;
end;
Jetzt weiß ich nicht, ob der Fehler in Find oder HighLightWord liegt. Wenn sich da bitte jemand erbarmen könnte und auch mal einen Blick draufwerfen könnte. Ich beschäftige mich schon mehrere Tage damit und sehe den Wald vor lauter Bäumen schon nicht mehr.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Nur ganze Wörter finden

  Alt 8. Aug 2004, 20:05
Ich habe Deinen Source übernommen und er funktioniert. Nur das Writeln habe ich deaktiviert. Poste doch mal den Inhalt des Textes und den der Stringlist (Words).
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Nur ganze Wörter finden

  Alt 8. Aug 2004, 22:11
Probier es mal mit dem Text im Anhang. Bei mir markiert er 26 Wörter. Das letzet "and" findet er im 8. Vers und bei den "rhe"s findet er nur das im Titel. Ach so, in der Liste habe ich zum Testen "and" und "the".
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    sl.Add('and');
    sl.Add('the');
    ShowMessage(IntToStr(HighlightWords(RichEdit1, sl, [fsBold, fsUnderline],
      clRed)) + ' Wörter markiert');
  finally
    FreeAndNil(sl);
  end;
end;
Angehängte Dateien
Dateityp: txt theraven.txt (6,3 KB, 17x aufgerufen)
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Nur ganze Wörter finden

  Alt 8. Aug 2004, 22:35
Zitat von Luckie:
Probier es mal mit dem Text im Anhang. Bei mir markiert er 26 Wörter. Das letzet "and" findet er im 8. Vers und bei den "rhe"s findet er nur das im Titel. Ach so, in der Liste habe ich zum Testen "and" und "the".
Exakt gleich. Ich dachte das finden wir vielleicht im chat schneller, aber der geht bei mir nicht -> Fehler auf Seite.

[edit]
Zwischenergebnis: Debugger beim 26. Wort angehalten und siehe da: der Text ist abgeschnitten. Es hört auf mit schrecklichen Effekten, s. Screenshot vom Debugger.
Miniaturansicht angehängter Grafiken
richedit1.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Nur ganze Wörter finden

  Alt 8. Aug 2004, 22:36
Was heißt exakt gleich? Findet er alle bei dir oder wie?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Nur ganze Wörter finden

  Alt 8. Aug 2004, 22:45
Zitat von Luckie:
Was heißt exakt gleich? Findet er alle bei dir oder wie?
Nein, siehe mein edit des letzten Postings.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Nur ganze Wörter finden

  Alt 8. Aug 2004, 22:48
Ja beim 26. bricht er bei mir auch ab. Das was der Debugger anzeigt, ist nicht weiterer tragisch. Es ist ein Text im RTF Format, der Debugger zeigt eben die Steierzeichen mit an, da er nir PlainText kann.

Komisch. Ich werde das moregn noch mal mit einem anderen Text probieren. Aber warum macht er es bei diesem Text nicht?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Nur ganze Wörter finden

  Alt 8. Aug 2004, 23:08
Zitat von Luckie:
Ja beim 26. bricht er bei mir auch ab. Das was der Debugger anzeigt, ist nicht weiterer tragisch. Es ist ein Text im RTF Format, der Debugger zeigt eben die Steierzeichen mit an, da er nir PlainText kann.

Komisch. Ich werde das moregn noch mal mit einem anderen Text probieren. Aber warum macht er es bei diesem Text nicht?
Wegen der Steuerzeichen. Vergiss erst mal Deine Funktion für ne Weile, denn so gehts (97 Wörter Markiert):
 LastWordPos := RichEdit.FindText(Words[i],LastWordPos,Length(Richedit.Text) - LastWordPos, [stWholeWord]); In der Hilfe steht extra, daß man nicht so vorgehen soll wie Dein Ansatz, wegen der Steuerzeichen.
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Nur ganze Wörter finden

  Alt 8. Aug 2004, 23:36
Edit: Kommando zurück, wenn man so nach ganzen Wörtern sucht klappts nicht...
Dani H.
  Mit Zitat antworten Zitat
Benutzerbild von S2B
S2B

Registriert seit: 1. Feb 2004
Ort: Aachen
1.268 Beiträge
 
#10

Re: Nur ganze Wörter finden

  Alt 8. Aug 2004, 23:50
Die Funktion ist in der Unit StrUtils!
Simon Praetorius
Gruß
S2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:16 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