Ok, dann will ich hier mal meine Lösung Vorstellen xD
Delphi-Quellcode:
const
Delimiters = [#1..#47, #58..#64, #91..#96, #123..#191, #215, #216, #247, #248];
Delimiters_0 = [#0] + Delimiters;
procedure GetWords(s: string; woerter: TStrings);
var
p, r: pchar;
Token: string;
begin
woerter.Clear;
p := pchar(s);
repeat
r := p;
while not (p^ in Delimiters_0) do inc(p);
SetString(Token, r, p - r);
if Token <> '' then woerter.Add(Token);
while p^ in Delimiters do inc(p);
until p^ = #0;
end;
function Such(Txt, Pattern: string): boolean;
var
slP: TStringlist;
x: integer;
pt: PChar;
p: array of PChar;
i: array of integer;
b: array of boolean;
begin
if (Txt = '') or (Pattern = '') then begin
result := false;
exit;
end;
Txt := ansiuppercase(Txt);
Pattern := ansiuppercase(Pattern);
slP := TStringlist.Create;
GetWords(Pattern, slP);
setlength(p, slP.count);
setlength(i, slP.count);
setlength(b, slP.count);
for x := 0 to slP.count - 1 do begin
p[x] := @slP[x][1];
i[x] := length(slP[x]);
b[x] := false;
end;
pt := @Txt[1];
while pt^ <> #0 do begin
for x := 0 to high(p) do
if comparemem(pt, p[x], i[x]) then b[x] := true;
inc(pt);
result := true;
for x := 0 to high(b) do
result := result and b[x];
if result then break;
end;
b := nil;
i := nil;
p := nil;
slP.free;
end;
procedure TForm1.SuchenButtonClick(Sender: Tobject);
var
I: Integer;
Ergebnis: Array of Integer;
AutorenListe: TStringList;
begin
SetLength(Ergebnis, 0);
AutorenListe := TStringList.Create;
if Listenfenster.Items.Count > 0 do
for I := 0 to Pred(Listenfenster.Items.Count) do
if Such(Listenfenster.Items[i], Autorfeld.Text) then
begin
SetLength(Ergebis, Succ(Length(Ergebnis)));
Ergebnis[high(Ergebnis)] := I;
AutorenListe.Add(Listenfenster.Items[i]);
end;
if length(Ergebnis) > 0 then // gefunden?
// if AutorenListe.Count > 0 then // alternativ
begin
// jetzt steht in Ergebnis der Index zu den Einträgen in Listenfenster
// zB den ersten Index kannst du mit Ergebnis[0] abrufen
// oder du nimmst die AutorenListe: showmessage(AutorenListe[0]);
end;
AutorenListe.Free;
end;
Diese Methode hat den Vorteil das sie erstens schnell ist, zweitens kannst du auch nach nach mehreren Wörtern suchen.
Beispiel: Du suchst "Friedrich Schiller"
Der Suchalgorythmus (schreibt man das so!?) würde auch "Friedrich von Schiller" oder "Schiller, Friedrich" finden.