Hallo erstmal,
Habe ein Problem mit einer Suche.
Ich gebe ein Suchwort ein, lasse dateien durchsuchen nach dem wort und wenn gefunden gibt er die Zeile in der Datei aus.
Allerdings soll die suche mit Wildcard funktionieren.
Das heißt man muss z.B nur "Hal" eingeben und trotzdem wird das Wort "Hallo" gefunden.
Ich habe eine Funktion dazu, die wie folgt aussieht:
Delphi-Quellcode:
function MatchStr(Source,Pattern:String;CaseSensitive:Boolean):Boolean;
function Match(Source,Pattern:PChar):Boolean;
begin
if StrComp(Pattern,'*')=0 then Result:=true
else
if (Source^=Chr(0)) and
(Pattern^<>Chr(0)) then Result:=false
else
if Source^=Chr(0) then Result:=true
else
case Pattern^ of
'*': if Match(Source,@Pattern[1]) then Result:=true
else Result:=Match(@Source[1],Pattern);
'?': Result:=Match(@Source[1],@Pattern[1]);
else if Source^=Pattern^ then Result:=Match(@Source[1],@Pattern[1])
else Result:=false;
end;
end;
begin
if not(CaseSensitive) then begin
Source :=AnsiLowerCase(Source);
Pattern:=AnsiLowerCase(Pattern);
end;
Result:=Match(PChar(Source),PChar(Pattern))
end;
ausgerufen so:
Delphi-Quellcode:
for i := 0 to LBZWDateipfad.Count - 1 do
Begin
zw:=GetXLine(Path + '\Kunden\' + LBZWDateipfad.Items.Strings[i], 3); // nicht beachten ist nur die funktion zum Zeilen auslesen
IF MatchStr(zw , suche + '*' ,false)= true then
Begin
// speicher ergebnisse
end;
end;
zw = ist die Zeile die ausgelesen wurde.
suche = das Suchwort.
Nun zum eigentlichen Problem:
Er findet einfach alles wenn ich zb: "E" eingebe findet er alles auch wörter ohne "E".
Er findet nur dann nix wenn der Buchstabe überhaupt nicht vorkommt in der Zeile der Textdatei.
Was mache ich falsch?