Q:
> i would like to make a function that return if the file is in that
wildcards
>
> e.g.
> wildcards(‘c:\*.txt’,’c:\test.txt’) = true
> wildcards(‘*.c?g’,’123.cfg’) = true
> wildcards(‘c*.doc’,’doc.doc’) = false
>
> thanks
A:
[code lang=”delphi”]type
PathStr = string[128]; { in Delphi 2/3: = string }
NameStr = string[12]; { in Delphi 2/3: = string }
ExtStr = string[3]; { in Delphi 2/3: = string }
{$V-} { in Delphi 2/ 3 to switch off “strict var-strings” }
function WildComp(FileWild,FileIs: PathStr): boolean;
var
NameW,NameI: NameStr;
ExtW,ExtI: ExtStr;
c: byte;
function WComp(var WildS,IstS: NameStr): boolean;
var
i, j, l, p : Byte;
begin
i := 1;
j := 1;
while (i<=length(WildS)) do
begin
if WildS[i]='*' then
begin
if i = length(WildS) then
begin
WComp := true;
exit
end
else
begin
{ we need to synchronize }
l := i+1;
while (l < length(WildS)) and (WildS[l+1] <> ‘*’) do
inc (l);
p := pos (copy (WildS, i+1, l-i), IstS);
if p > 0 then
begin
j := p-1;
end
else
begin
WComp := false;
exit;
end;
end;
end
else
if (WildS[i]<>‘?’) and ((length(IstS) < i)
or (WildS[i]<>IstS[j])) then
begin
WComp := false;
exit
end;
inc (i);
inc (j);
end;
WComp := (j > length(IstS));
end;
begin
c:=pos(‘.’,FileWild);
if c=0 then
begin { automatically append .* }
NameW := FileWild;
ExtW := ‘*’;
end
else
begin
NameW := copy(FileWild,1,c-1);
ExtW := copy(FileWild,c+1,255);
end;
c:=pos(‘.’,FileIs);
if c=0 then
c:=length(FileIs)+1;
NameI := copy(FileIs,1,c-1);
ExtI := copy(FileIs,c+1,255);
WildComp := WComp(NameW,NameI) and WComp(ExtW,ExtI);
end;
begin
if WildComp(‘a*.bmp’, ‘auto.bmp’) then ShowMessage(‘OK 1’);
if not WildComp(‘a*x.bmp’, ‘auto.bmp’) then ShowMessage(‘OK 2’);
if WildComp(‘a*o.bmp’, ‘auto.bmp’) then ShowMessage(‘OK 3’);
if not WildComp(‘a*tu.bmp’,’auto.bmp’) then ShowMessage(‘OK 4’);
end.
[/code]
[tags]Delphi, File[/tags]
0 Kommentare zu “Check if File matches Wildcards”