Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Zeichenüberprüfung wird ignoriert

  Alt 1. Apr 2008, 21:32
Hallo knolli,

deine Routinen zur Wortzerlegung sind sehr ungewöhnlich. Camel-Case Wörter werden zerissen - warum?

Bei mir und vielen anderen besteht ein Text aus Wörtern, die durch bestimmte Zeichen voneinander getrennt sind:

Delphi-Quellcode:
procedure ExtractWords(const Text: string; const breakChars: TSysCharSet; s: TStrings);
var
  iFirst, iLast: Integer;
begin
  s.BeginUpdate;
  try
    iFirst := 0;
    while iFirst < Length(Text) do
    begin
      repeat
        Inc(iFirst);
      until (iFirst > Length(Text))
      or not (Text[iFirst] in breakChars);
      iLast := iFirst;
      while (iLast <= Length(Text))
      and not (Text[iLast] in breakChars) do
        Inc(iLast);
      s.Add(Copy(Text, iFirst, iLast - iFirst));
      iFirst := iLast;
    end;
  finally
    s.EndUpdate;
  end;
end;
Als BreakChars kannst du alles verwenden, was kein Buchstabe ist. Auf der Suche nach einem Palindrom interessiert dich die Groß-Kleinschreibung überhaupt nicht:

Delphi-Quellcode:
procedure TDemoForm.WebBrowserDocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  with pDisp as IWebBrowser2 do
    with Document as IHTMLDocument2 do
      ExtractWords(AnsiLowerCase(body.innerText),
        [#1..#255] - ['a'..'z', 'ä', 'ö', 'ü', 'ß'],
        Memo.Lines
      );
end;
ExtractWords() arbeitet kummulativ, also löschst du die Liste besser vorher:

Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
begin
  Memo.Clear;
  WebBrowser.Navigate(Edit.Text);
end;
Grüße vom marabu
  Mit Zitat antworten Zitat