hi,
ich ware gerade dabei eine eigene MaskMatch funktion zu schreiben, bis her sieht sie so aus:
Delphi-Quellcode:
function MaskMatch(S, Mask: string): Boolean;
var
ML, SL, MI, SI: Integer;
begin
Result := False;
if (S <> '') and (Mask <> '') then
begin
ML := Length(Mask);
SL := Length(S);
MI := 0;
SI := 0;
while (MI < ML) do
begin
Inc(MI);
Inc(SI);
while (MI < ML) and (Mask[MI] = '*') and (Mask[MI+1] = '*') do
Inc(MI);
if SI <= SL then
begin
case Mask[MI] of
'*': begin
if MI < ML then
begin
Inc(MI);
while (SI <= SL) and (S[SI] <> Mask[MI]) do
Inc(SI);
if MI = ML then
Result := (Mask[MI] = S[SI]) and (SI = SL)
else Result := Mask[MI] = S[SI];
end
else Result := True;
end;
'?': begin
if MI = ML then
Result := SI = SL;
end;
else begin
if MI = ML then
Result := (SI = SL) and (S[SI] = Mask[MI])
else Result := S[SI] = Mask[MI];
end;
end;
end else
begin
Result := (MI = ML) and (Mask[MI] = '*');
Break;
end;
if not Result then
Break;
end;
end;
end;
Sie funktioniert auch schon fast, z.b ergibt das:
Zitat:
if MaskMatch('blubbk12345', '?????k*') then
true usw....
aber das hier funktioniert nicht:
Zitat:
if MaskMatch('khkk', '*kk*') then
Das ergibt False obwohl es True sein müsste...
Das liegt daran das nach "h" mit "k" verglichen wird... hat jemand ne Idee was ich da machen könnte?