Wie es aussieht, ist die Lösung des Problems doch einfacher als ich dachte. Himitsus mathematischer Ansatz ist zwar 'smarter', aber der Vorschlag von Olli73 schien mir vor allem wegen seiner einfachen und (für mich) gut durchschaubaren Struktur für meine Zwecke am besten geeignet.
Auf der Basis dieses Codes habe ich folgende Routine entwickelt:
Delphi-Quellcode:
Function GetQuery(title,artist,album:
string):
string;
var qlen,namlen,artlen,alblen: Integer;
const nam = 40;
// Werte können evtl. noch zur Optimierung des Suchergebnisses variiert werden
art = 30;
alb = 30;
maxlen = nam + art + alb;
// maximal 100
begin
namlen:= length(Title);
artlen:= length(artist);
alblen:= length(album);
qlen:= namlen + artlen + alblen;
If qlen > maxlen
Then
begin
while qlen > maxlen
do
begin
if alblen > alb
then // Reihenfolge nach Priorität der Elemente
begin
Dec(alblen);
dec(qlen);
if qlen <= maxlen
then break;
end;
if artlen > art
then
begin
Dec(artlen);
dec(qlen);
if qlen <= maxlen
then break;
end;
if namlen > nam
then
begin
Dec(namlen);
dec(qlen);
end;
end;
setlength(title,namlen);
setlength(artist,artlen);
setlength(album,alblen);
end;
result:= title + artist + album;
end;
Das scheint hervorragend zu funktionieren. Die Trefferquote bei der Suche ist jedenfalls geradezu sensationell. Für die Konstanten werde ich noch einen Konfigurationsdialog basteln, der nur die Eingabe von Werten erlaubt, deren Summe den Maximalwert nicht überschreitet.
Nochmals Danke für die Hilfe!
Gruß LP