home *** CD-ROM | disk | FTP | other *** search
- {
- > Does anyone know how to pass a wildcard Filename to a parameter String and
- > have the code grab the actual full Filename?
-
- not quite, but close. Consider the Function Wild below. if you should do a
- findfirst/findnext and run the Function wild on each found name you get what
- you want.
- }
-
- Function Wild(FileName, Card : String) : Boolean;
- {Returns True if the wildcard description in 'card' matches 'flname'
- according to Dos wildcard principles. The 'card' String MUST have a period!
- Example: Wild('test.tat','t*.t?t' returns True}
- Var
- c : Char;
- p,i,n,l : Byte;
-
- begin
- Wild := True;
- {test For special Case first}
- if Card = '*.*' then
- Exit;
- Wild := False;
- p := Pos('.', Card);
- i := Pos('.', FileName);
- if p = 0 then
- begin
- Writeln('Invalid use of Function "wild". Program halted.');
- Writeln('Wild card must contain a period.');
- Halt;
- end;
- {test the situation beFore the period}
- n := 1;
- Repeat
- c := UpCase(Card[n]);
- if c = '*' then
- n := p
- else
- if (upCase(FileName[n]) = c) or (c = '?') then
- inc(n)
- else
- Exit;
- Until n >= p;
-
- {Now check after the period}
- n := p + 1; {one position past the period of the wild card}
- l := Length(FileName);
- Inc(i); {one position past the period of the Filename}
- Repeat
- if n > Length(Card) then
- Exit;
- c := UpCase(Card[n]);
- if c = '*' then
- i := l + 1 {in order to end the loop}
- else
- if (UpCase(FileName[i]) = c) or (c = '?') then
- begin
- Inc(n);
- Inc(i);
- end
- else
- Exit;
- Until i > l;
-
- Wild := True;
- End;