[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]

    {
    > 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;

[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]