Vor langer Zeit habe ich mal folgende Funktion gefunden:
Wer sie geschrieben hat weiß ich aber nicht.
Delphi-Quellcode:
function Like(const sStr, sSub: String): Boolean;
var
sPtr : PChar;
pPtr : PChar;
sRes : PChar;
pRes : PChar;
begin
Result := False;
sPtr := PChar(sStr);
pPtr := PChar(sSub);
sRes := nil;
pRes := nil;
repeat
repeat // ohne vorangegangenes "*"
case pPtr^ of
#0: begin
Result := (sPtr^ = #0);
if ((Result) or (sRes = nil) or (pRes = nil)) then Exit;
sPtr := sRes;
pPtr := pRes;
Break;
end;
'*': begin
Inc(pPtr);
pRes := pPtr;
Break;
end;
'?': begin
if (sPtr^ = #0) then Exit;
Inc(sPtr);
Inc(pPtr);
end;
else
begin
if (sPtr^ = #0) then Exit;
if (sPtr^ <> pPtr^) then
begin
if ((sRes = nil) or (pRes = nil)) then Exit;
sPtr := sRes;
pPtr := pRes;
Break;
end else
begin
Inc(sPtr);
Inc(pPtr);
end;
end;
end;
until False;
repeat // mit vorangegangenem "*"
case pPtr^ of
#0: begin
Result := True;
Exit;
end;
'*': begin
Inc(pPtr);
pRes := pPtr;
end;
'?': begin
if (sPtr^ = #0) then Exit;
Inc(sPtr);
Inc(pPtr);
end;
else
begin
repeat
if (sPtr^ = #0) then Exit;
if (sPtr^ = pPtr^) then Break;
Inc(sPtr);
until False;
Inc(sPtr);
sRes := sPtr;
inc(pPtr);
Break;
end;
end;
until False;
until False;
end;