Hallo zusammen,
ich durchsuche per for-Schleife eine Listbox..
Ich muss eine Scheife nehmen, weil ich per Enter immer weiter suchen lasse.
Suchtext eingeben -> Enter -> 1. Ergebnis
Enter -> 2. Ergebnis wird angezeigt usw.
Das funktioniert soweit, dauert allerdinngs bei ca. 8000 Einträgen auch schon bis zu 13 Sekunden...
Meine Kernkomponenten innerhalb der Schleife sind:
Delphi-Quellcode:
type
TSuche = record
Text: AnsiString;
ItemPos: integer;
StrPos: integer;
end;
//...
var
i, NextPos: Integer;
ItemText: AnsiString;
begin
if Suche.ItemPos = -1 then
Suche.ItemPos := 0;
Suche.Text := AnsiUpperCase(Edit1.Text); // Edit1 = Suchtext
for i := Suche.ItemPos to Pred(Search_Form.Listbox.Count) do
begin
ItemText := AnsiUpperCase(Search_Form.Listbox.Items.Strings[i]);
if Suche.StrPos > 0 then
begin
NextPos := pos(Suche.Text, Copy(ItemText, Suche.StrPos +
length(Suche.Text), length(ItemText) - Suche.StrPos));
if NextPos > 0 then
Suche.StrPos := Suche.StrPos + length(Suche.Text) + NextPos - 1
else
Suche.StrPos := 0;
end
else
Suche.StrPos := pos(Suche.Text, ItemText);
....
Ich hatte schon einiges optimiert (ursprünglich 21 Sek), bin nun aber zu obigen Ergebnis gelangt und habe damit das für mich Machbare erreicht.
Besteht hier überhaupt noch eine Chance das Ganze wesentlich zu beschleunigen?
Verbesserungen um einzelne Prozentpünktchen sind zwar generell auch interessant, aber so richtig interesant wäre alles was mehr wie 15% bringen würde.
Gibt es vllt. eine ganz andere Vorgehensweise?
Ich hatte schon die Idee alles in eine Textdatei zu speichern und diese dann zu durchsuchen.
Das würde sehr schnell gehen, aber wie suche ich dann jeweils weiter ohne eine Schleife?
Danke schon mal vorab!