Die ganzen ansilowercase würde ich mal irgendwie rausnehmen.
Am einfachsten wäre es wohl auch, da Stringoperationen mit zu den Langsamsten gehören und und dazu noch für jedes ansilowercase bei jedem Aufruf der IF-Abfrage eine tempräre Stringvariable angelegt wird (speicher resservieren/freigeben), wo dann der kleingeschriebene Text drinsteht.
Wenn du häufig suchst, wäre es da wohl einfacher, wenn du noch ein zweites Array mit den kleingeschriebenen Texten erstellst, oder auch gleich die Mleingeschriebenen mit in dieses Array aufnimmst.
Das ergibt dann zwar die doppelte Datenmänge, aber erspart das ständige Umgewandle.
z.B. so:
du müßtest dann nur jedesmal wenn was in einem Eintrag geändert wurde ein Update dieses Eintrags vornehmen.
Und dann einfach nur in der Suche die
Delphi-Quellcode:
type TID3Tag = record
Titel : string;
Artist : string;
Album : string;
Year : string;
Comment : string;
Genre : string;
Track : integer;
end;
TMp3Eintrag = record
Filename : string;
Path : string;
Anzeige : boolean;
Id3tag : Tid3tag;
lowercase: record
Filename : string;
Path : string;
Id3tag : Tid3tag;
end;
end;
procedure updade(ListenNummer, ArrayIndex: integer);
begin
Mp3Daten[ListenNummer, ArrayIndex].lowercase.Filename :=
ansilowercase(Mp3Daten[ListenNummer, ArrayIndex].Filename);
Mp3Daten[ListenNummer, ArrayIndex].lowercase.Path :=
ansilowercase(Mp3Daten[ListenNummer, ArrayIndex].Path);
Mp3Daten[ListenNummer, ArrayIndex].lowercase.Id3tag.Titel :=
ansilowercase(Mp3Daten[ListenNummer, ArrayIndex].Id3tag.Titel);
...
Mp3Daten[ListenNummer, ArrayIndex].lowercase.Id3tag.Genre :=
ansilowercase(Mp3Daten[ListenNummer, ArrayIndex].Id3tag.Genre);
end;
if pos(CurrentSearch, Mp3Daten[ListenNummer,ArrayIndex].lowercase.Filename)
or pos(CurrentSearch, Mp3Daten[ListenNummer,ArrayIndex].lowercase.Path)
or pos(CurrentSearch, Mp3Daten[ListenNummer,ArrayIndex].lowercase.id3tag.Titel)
...
or pos(CurrentSearch, Mp3Daten[ListenNummer,ArrayIndex].lowercase.id3tag.Genre)
<> 0;
So würden die lowercase-Strings ja nur einmal erstellt (wenn du sie für mehrere Suchanfagen verwendest ... bei 'ner einmaligen Suchaktion wären die sogar hinderlich und speicherfressend, da ja beim Auffinden des Suchstrings die nachfolgenden Vergleiche der aktuellen IF-Abfrage entfallen) und dann jedesmal nur in den bereits Existierenden nur noch gesucht und eben nicht jedesmal ein neuer lowercase-String erstellt.
Wenn die lowercase-Strings längere Zeit nicht benötigt werden, kannst du sie ja zwegs Speicherschonung freigeben und dann vor der nächsten Suche wieder erstellen.
ach ja: (bringtzwar nicht viel, aber macht es womöglich etwas übersichtlicher)
Delphi-Quellcode:
if ... then match := true else false;
// entspricht
match := ...;