AGB  ·  Datenschutz  ·  Impressum  







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

Suche effizienter machen

Ein Thema von Zioone · begonnen am 19. Sep 2008 · letzter Beitrag vom 23. Sep 2008
 
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#32

Re: Suche effizienter machen

  Alt 23. Sep 2008, 12:39
Hier ist meine Variante:

Delphi-Quellcode:
var SuchPos: Integer;
begin
  if OpenDialog.Execute then
  begin
    if Length(edSuchwort.Text) > 0 then
    begin
      RichEdit.Lines.LoadFromFile(OpenDialog.FileName);
      SuchPos := 0;
      repeat
        SuchPos := RichEdit.FindText(edSuchwort.Text,SuchPos,Length(RichEdit.Lines.Text),[stWholeWord]);
        if SuchPos > -1 then
        begin
          RichEdit.SelStart := SuchPos;
          RichEdit.SelLength := Length(edSuchwort.Text);
          RichEdit.SelAttributes.Color := clRed;
          SuchPos := SuchPos + Length(edSuchwort.Text);
        end;
      until SuchPos = -1;
    end;
  end;
end;
Ich habe keinen Vergleich, wie schnell sie ist, aber sie funktioniert, wenn auch nur mit einem Suchwort. Für weitere Wörter muss man halt erweitern. Ein paar Kleinigkeiten könnte man auch noch optimieren, z.B. SuchLaenge := Length(edSuchwort.Text); im Voraus zuweisen.

EDIT

Der Aufruf von Length scheint viel Zeit zu benötigen. Ich habe das jetzt noch einmal so probiert und der Geschwindigkeitsunterschied ist immens.

Delphi-Quellcode:
var SuchPos, SuchLaenge, RichEditLaenge: Integer;
    STime, ETime: Integer;
begin
  if OpenDialog.Execute then
  begin
    SuchLaenge := Length(edSuchwort.Text);
    if SuchLaenge > 0 then
    begin
      RichEdit.Lines.LoadFromFile(OpenDialog.FileName);
      RichEditLaenge := Length(RichEdit.Lines.Text);

      STime := GetTickCount();

      SuchPos := 0;
      repeat
        SuchPos := RichEdit.FindText(edSuchwort.Text,SuchPos,RichEditLaenge,[stWholeWord]);
        if SuchPos > -1 then
        begin
          RichEdit.SelStart := SuchPos;
          RichEdit.SelLength := SuchLaenge;
          RichEdit.SelAttributes.Color := clRed;
          SuchPos := SuchPos + SuchLaenge;
        end;
      until SuchPos = -1;

      ETime := GetTickCount();
      lbZeit.Caption := IntToStr(ETime - STime);
      lbZeit.Visible := True;

    end;
  end;
end;
  Mit Zitat antworten Zitat
 


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 12:17 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