On 12/2/2014 5:12 PM, Bart wrote:
On 12/2/14, waldo kitty <wkitt...@windstream.net> wrote:

how do you process for multiple filemasks?

eg: find ts??????.sel and t???.sel for the same processing run

Maybe I misunderstand the question but:
Use '*' as mask for FindFirst/FindNext then use MatchesMaskList()?

can you help me understand the differences in the output of the below program?

given these three filenames: t.txt t1.txt t11.txt

with mask t?.txt why does MatchesMaskList not show t.txt and t11.txt like plain findfirst?

with mask t??.txt why does MatchesMaskList not show t.txt and t1.txt like plain findfirst?

am i wrong to expect the output to be the same?

is there a way to have MatchesMaskList work like plain FindFirst routine with the addition of handling multiple masks?

i think i'm really only wanting something like MatchesMaskList simply for handling multiple masks... i'm undecided on the additional restrictiveness of MatchesMaskList but i can see where it could be desirable in some cases...


===== snip =====
Program Filemask;

Uses
  SysUtils, StrUtils, Classes, Masks;

var
  dirSR : TSearchRec;
  flist : TStringList;
  fmask : string;

begin
  if paramstr(1) = '' then
    writeln('please specify a file mask - eg: *.foo')
  else
    begin
      fmask := paramstr(1);
      writeln('looking for files that match "'+fmask+'"');
      writeln;
      flist := TStringList.Create;
      try
        flist.Sorted := False;
        flist.Duplicates := dupIgnore;
        flist.CaseSensitive := False;
        writeln('*using FindFirst(fmask,faAnyFile,dirSR)');
        if FindFirst(fmask,faAnyFile,dirSR) = 0 then
          begin
            repeat
              flist.Add(dirSR.Name);
writeln(PadRight(IntToStr(flist.count),6) + ' ' + flist.Strings[flist.count-1]);
            until FindNext(dirSR) <> 0;
            {$IFDEF FPC}
            findclose(dirSR);
            {$ENDIF}
          end;
        writeln;
writeln(PadRight('found ' + IntToStr(flist.count),5) + ' files matching "'+fmask+'"');

        flist.Clear;
        writeln;

        writeln('*using FindFirst(''*'',faAnyFile,dirSR) with MatchesMaskList');
        if FindFirst('*',faAnyFile,dirSR) = 0 then
          begin
            repeat
              if MatchesMaskList(dirSR.Name,fmask) then
                begin
                  flist.Add(dirSR.Name);
writeln(PadRight(IntToStr(flist.count),6) + ' ' + flist.Strings[flist.count-1]);
                end;
            until FindNext(dirSR) <> 0;
            {$IFDEF FPC}
            findclose(dirSR);
            {$ENDIF}
          end;
        writeln;
writeln(PadRight('found ' + IntToStr(flist.count),5) + ' files matching "'+fmask+'"');
      finally
        if assigned(flist) then
          freeandnil(flist);
      end;
    end;
end.
===== snip =====


--
 NOTE: No off-list assistance is given without prior approval.
       Please *keep mailing list traffic on the list* unless
       private contact is specifically requested and granted.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to