Re: [fpc-pascal] findfirst wildcards...

2014-12-04 Thread Bart
On 12/3/14, waldo kitty wkitt...@windstream.net wrote:
 On 12/3/2014 5:09 PM, Bart wrote:

 Windows.FindFirstFile however treats ? as exactly 1 character AFAIK.
 And is I'm not mistake this was also the case with TP in the old days.



Seems I was mistaken. Sorry for the confusion.
FF with mask 'x?.tst' will list bot 'x.tst' and 'xx.tst'.
MatchesMask('x.tst','x?.tst') resturns False as it does in Delphi (7)...

MatchesMask however treats the mask more like on nix platform and
supports things that FF/FN do not.

Bart
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] findfirst wildcards...

2014-12-03 Thread Jonas Maebe


On 03 Dec 2014, at 06:05, waldo kitty wrote:

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?


? means a single arbitrary character.  findfirst with t?.txt  
should not match t.txt nor t11.txt either. On the other hand, t*.txt  
means t followed by 0 or more arbitrary characters and ending  
in .txt. That should/will match both t.txt and t11.txt



Jonas
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] findfirst wildcards...

2014-12-03 Thread Graeme Geldenhuys

On Tue, 2 Dec 2014, waldo kitty wrote:


how do you process for multiple filemasks?

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



I don't think FindFirst and FindNext has that capability. I would use the
AllMasks constant and then manually match using a simple regex that caters
for all variations you need. Yes, FindNext will initially match every
file, but doesn't the underlying system have to look at every file anyway
to only return a specific mask?

Just for your reference, the simple masks syntax.

  ?  matches a single character
  *  matches multiple characters

With regex you have MUCH greater control over how to match something. For
example, here is a simple regex to match the mask you listed above. I
don't know how strict you want the ??? text so I used a . (any character
exect \n), but you might want to tone that down a bit.

  t(?:.{3}|s.{6})\.sel

Regards,
  Graeme



This email and its attachments may be confidential and are intended solely for 
the use of the individual to whom it is addressed. Any views or opinions are 
solely those of the author and do not necessarily represent those of Quality 
Technology Systems Ltd. If you are not the intended recipient of this email and 
its attachments, you must take no action based upon them, nor must you copy or 
show them to anyone. If you receive the message in error, please immediately 
delete it, destroy all copies of it and notify the sender. Internet email is 
not a totally secure medium and therefore Quality Technology Systems Ltd does 
not accept legal responsibility for the contents of this message. We have taken 
steps to ensure that this email and any attachments are free from viruses. 
However, we cannot accept any responsibility for any virus transmitted by us 
and recommend that you subject any incoming email to your own virus checking 
procedure. Registered in England No. 3208823
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] findfirst wildcards...

2014-12-03 Thread Graeme Geldenhuys

On Wed, 3 Dec 2014, Michael Van Canneyt wrote:


They do.


Wow. We are never to old to learn. :-)  I'll have to take a closer look at
that functionality.

Regards,
  Graeme




This email and its attachments may be confidential and are intended solely for 
the use of the individual to whom it is addressed. Any views or opinions are 
solely those of the author and do not necessarily represent those of Quality 
Technology Systems Ltd. If you are not the intended recipient of this email and 
its attachments, you must take no action based upon them, nor must you copy or 
show them to anyone. If you receive the message in error, please immediately 
delete it, destroy all copies of it and notify the sender. Internet email is 
not a totally secure medium and therefore Quality Technology Systems Ltd does 
not accept legal responsibility for the contents of this message. We have taken 
steps to ensure that this email and any attachments are free from viruses. 
However, we cannot accept any responsibility for any virus transmitted by us 
and recommend that you subject any incoming email to your own virus checking 
procedure. Registered in England No. 3208823
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] findfirst wildcards...

2014-12-03 Thread Tomas Hajny
On Wed, December 3, 2014 06:05, waldo kitty wrote:
 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?
 .
 .

Given the fact that OS/2 appeared in your listing, I can clarify the
difference. It comes from the fact that in case of FindFirst/FindNext, the
interpretation of wildcards is performed by the underlying operating
system whereas the routine mentioned by Bart performs this interpretation
inside the Pascal code. Equally to DOS (and actually implemented that way
in an attempt to make OS/2 as compatible to DOS as possible), OS/2 is
somewhat more relaxed in interpretation of question marks at the end of
the file name (i.e. before the file extension) in the sense of evaluating
question marks at that position (but not elsewhere) as either 1 _or_ no
character.

You get the same behaviour under DOS (either compiled with TP/BP or FPC)
and also e.g. under DosEmu under Linux, etc. I believe that the MS Windows
NTVDM implementation would not behave that way (i.e. I believe that the
DOS window simply passes the request to MS Windows which perform the
evaluation differently), but I haven't tried it.

Now regarding your original question - I don't think that you can ask the
operating system to search for multiple masks at the same time (and thus
the RTL does not provide such functionality directly either). Scanning
through all the files as suggested by Bart is the standard solution for
that. However, _if_ you have reasons to be concerned about the performance
of scanning through all the files (e.g. if running over a slow network
drive and having to work with directories containing _many_ files - read:
thousands of files at least), it is possible to reduce the number of
operating system calls and network transfers by using the OS/2 API
directly and providing it with a buffer sufficient for returning
information about many files at once (e.g. one hundred of them, or
whatever). Obviously, your code would still need to go through all of them
one by another, but it would decrease the overall time needed for
processing this scan. Still, as already mentioned, this solution should
not be necessary under normal conditions (and it would imply necessity of
changing the implementation for other operating systems - unlike to using
standard RTL functionality).

Tomas


___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] findfirst wildcards...

2014-12-03 Thread waldo kitty

On 12/3/2014 3:41 AM, Jonas Maebe wrote:


On 03 Dec 2014, at 06:05, waldo kitty wrote:


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?


? means a single arbitrary character.  findfirst with t?.txt should not
match t.txt nor t11.txt either.


yes, i wrote t11.txt when i should have written t1.txt... my bad...

however on
  OS/2 native
  OS/2 with 4OS2 command interpreter replacement
  OS/2 DOS native
  OS/2 DOS with 4DOS command interpreter replacement
  Vista (32bit)
t?.txt returns both t.txt and t1.txt...


C:\freepascal\projects\miscdir t?.txt

 Volume in drive C is SQ004512V04
 Volume Serial Number is DC02-9142

 Directory of C:\freepascal\projects\misc

12/02/2014  11:31 PM 2 t.txt
12/02/2014  11:31 PM 2 t1.txt
   2 File(s)  4 bytes
   0 Dir(s)  51,111,350,272 bytes free



C:\freepascal\projects\miscfilemask t?.txt

looking for files that match t?.txt

*FindFirst only - multiple masks capable*

  ff1(t?.txt);
t.txt
t1.txt


*FindFirst w/ MatchesMaskList*

  ff2(t?.txt);
t1.txt


*FindFirst w/ RegExpr - multiple masks capable*

  ff3(t?.txt);
t.txt
t1.txt
t11.txt



new filemask demo program follows...


= snip filemask.lpr =
Program Filemask;

Uses
  SysUtils, StrUtils, Classes, Masks, RegExpr;

var
  dirSR : TSearchRec;
  flist : TStringList;
  fmask : String;
  lcnt  : Integer;

procedure ff(tstr : String);
begin
  if FindFirst(tstr,faAnyFile,dirSR) = 0 then
begin
  repeat
flist.Add(dirSR.Name);
  until FindNext(dirSR)  0;
  {$IFDEF FPC}
  FindClose(dirSR);
  {$ENDIF}
end;
end;

procedure ff1(tstr : String);
var
  tcnt  : Integer = 0;
  fmcnt : Integer = 0;
begin
  fmcnt := WordCount(tstr,[';']);
  if fmcnt = 0 then
ff(tstr)
  else
for tcnt := 1 to fmcnt do
  begin
ff(ExtractWord(tcnt,tstr,[';']));
  end;
end;

procedure ff2(tstr : String);
begin
  if FindFirst('*',faAnyFile,dirSR) = 0 then
begin
  repeat
if MatchesMaskList(dirSR.Name,tstr) then
  flist.Add(dirSR.Name);
  until FindNext(dirSR)  0;
  {$IFDEF FPC}
  FindClose(dirSR);
  {$ENDIF}
end;
end;

procedure ffregex(tstr : String);
var
  RegexObj: TRegExpr;
begin
  RegexObj := TRegExpr.Create;
  RegexObj.Expression := tstr;
  if FindFirst('*',faAnyFile,dirSR) = 0 then
begin
  repeat
if RegexObj.Exec(dirSR.Name) then
  flist.Add(dirSR.Name);
  until FindNext(dirSR)  0;
  {$IFDEF FPC}
  FindClose(dirSR);
  {$ENDIF}
end;
  RegexObj.Free;
end;

procedure ff3(tstr : String);
var
  tcnt  : Integer = 0;
  fmcnt : Integer = 0;
begin
  fmcnt := WordCount(tstr,[';']);
  if fmcnt = 0 then
ffregex(tstr)
  else
for tcnt := 1 to fmcnt do
  begin
ffregex(ExtractWord(tcnt,tstr,[';']));
  end;
end;


begin
  if ParamStr(1) = '' then
WriteLn('please specify a file mask - eg: *.foo')
  else
begin
  fmask := ParamStr(1);
  WriteLn;
  WriteLn('looking for files that match '+fmask+'');
  WriteLn;
  flist := TStringList.Create;
  flist.Sorted := True;
  flist.Duplicates := dupIgnore;
  flist.CaseSensitive := False;
  try
WriteLn('*FindFirst only - multiple masks capable*');
WriteLn;
WriteLn('  ff1('+fmask+');');
ff1(fmask);
for lcnt := 1 to flist.Count do
  WriteLn(''+flist.Strings[lcnt-1]);
WriteLn;
WriteLn;

flist.Clear;
WriteLn('*FindFirst w/ MatchesMaskList*');
WriteLn;
WriteLn('  ff2('+fmask+');');
ff2(fmask);
for lcnt := 1 to flist.Count do
  WriteLn(''+flist.Strings[lcnt-1]);
WriteLn;
WriteLn;

flist.Clear;
WriteLn('*FindFirst w/ RegExpr - multiple masks capable*');
WriteLn;
WriteLn('  ff3('+fmask+');');
ff3(fmask);
for lcnt := 1 to flist.Count do
  WriteLn(''+flist.Strings[lcnt-1]);
WriteLn;
WriteLn;
  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


Re: [fpc-pascal] findfirst wildcards...

2014-12-03 Thread waldo kitty

On 12/3/2014 6:16 AM, Tomas Hajny wrote:

Given the fact that OS/2 appeared in your listing, I can clarify the
difference. It comes from the fact that in case of FindFirst/FindNext, the
interpretation of wildcards is performed by the underlying operating
system whereas the routine mentioned by Bart performs this interpretation
inside the Pascal code. Equally to DOS (and actually implemented that way
in an attempt to make OS/2 as compatible to DOS as possible), OS/2 is
somewhat more relaxed in interpretation of question marks at the end of
the file name (i.e. before the file extension) in the sense of evaluating
question marks at that position (but not elsewhere) as either 1 _or_ no
character.


right... i see this everywhere /except/ on native linux... even DOSEMU and 
similar that i have tested all see '?' as 0 or 1 character... even REGEX takes 
that approach :)



You get the same behaviour under DOS (either compiled with TP/BP or FPC)
and also e.g. under DosEmu under Linux, etc. I believe that the MS Windows
NTVDM implementation would not behave that way (i.e. I believe that the
DOS window simply passes the request to MS Windows which perform the
evaluation differently), but I haven't tried it.


cmd and command both see '?' as 0 or 1 character...

C:\freepascal\projects\misccommand

C:\FREEPA~1\PROJECTS\MISCver

Microsoft Windows [Version 6.0.6002]

C:\FREEPA~1\PROJECTS\MISCdir t?.txt
 Volume in drive C is SQ004512V04
 Volume Serial Number is DC02-9142

 Directory of C:\FREEPA~1\projects\misc

12/02/2014  11:31 PM 2 t.txt
12/02/2014  11:31 PM 2 t1.txt
   2 File(s)  4 bytes
   0 Dir(s)  51,110,965,248 bytes free

C:\FREEPA~1\PROJECTS\MISCexit


C:\FREEPA~1\projects\misccmd
Microsoft Windows [Version 6.0.6002]
Copyright (c) 2006 Microsoft Corporation.  All rights reserved.

C:\FREEPA~1\projects\miscdir t?.txt
 Volume in drive C is SQ004512V04
 Volume Serial Number is DC02-9142

 Directory of C:\FREEPA~1\projects\misc

12/02/2014  11:31 PM 2 t.txt
12/02/2014  11:31 PM 2 t1.txt
   2 File(s)  4 bytes
   0 Dir(s)  51,111,006,208 bytes free

C:\FREEPA~1\projects\miscexit



Now regarding your original question - I don't think that you can ask the
operating system to search for multiple masks at the same time (and thus
the RTL does not provide such functionality directly either).


understood...


Scanning through all the files as suggested by Bart is the standard solution
for that.


i didn't realize that that would be how it was done until after i started 
finding and reading relevant pages... when i started looking, i found nothing 
for plain FPC... everything was for delphi or lazarus...



However, _if_ you have reasons to be concerned about the performance of
scanning through all the files (e.g. if running over a slow network drive and
having to work with directories containing _many_ files - read: thousands of
files at least), it is possible to reduce the number of operating system
calls and network transfers by using the OS/2 API directly and providing it
with a buffer sufficient for returning information about many files at once
(e.g. one hundred of them, or whatever).


the most i've had to wade through was ~4 files but i don't think that that 
will be much of a problem... it wasn't a problem with my previous simplistic 
finding and processing methods but i've recently removed the artificial file 
limits i had when using arrays... now i'm loading matching filenames into 
stringlists and then processing from there ;)



Obviously, your code would still need to go through all of them one by
another, but it would decrease the overall time needed for processing this
scan. Still, as already mentioned, this solution should not be necessary
under normal conditions (and it would imply necessity of changing the
implementation for other operating systems - unlike to using standard RTL
functionality).


yeah, i'm looking for easy and simplistic cross-platform capability if i can get 
it... one of my projects is targetted at OS/2, winwhatever, and linux... they're 
all i can compile natively for... with that and the lack of lazarus on OS/2, i 
think the demo program i posted in my reply to jonas shows me the yellow brick 
road to follow to the emerald city... the hint came from bart and/or some older 
messages i found where it was stated that calling findfirst multiple times was a 
possibility... i think that (ff1) and/or the regex one i came up with (ff3) will 
work best for my needs...


i do also greatly appreciate bart's initial post and the subsequent ones from 
others... they got me started thinking clearer when i was blind and stuck before ;)



--
 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.

Re: [fpc-pascal] findfirst wildcards...

2014-12-03 Thread Ralf Quint

On 12/3/2014 8:30 AM, waldo kitty wrote:

On 12/3/2014 3:41 AM, Jonas Maebe wrote:


On 03 Dec 2014, at 06:05, waldo kitty wrote:

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?


? means a single arbitrary character.  findfirst with t?.txt 
should not

match t.txt nor t11.txt either.


yes, i wrote t11.txt when i should have written t1.txt... my bad...

however on
  OS/2 native
  OS/2 with 4OS2 command interpreter replacement
  OS/2 DOS native
  OS/2 DOS with 4DOS command interpreter replacement
  Vista (32bit)
t?.txt returns both t.txt and t1.txt...
On any DOS based OS (that includes OS/2 and Windows), the ? wildcard 
character will find any character, including no character at all in that 
position. So in your example, t?.txt will find t.txt and tx.txt but not 
txy.txt. It will not return any filename longer than your search mask, 
but return shorter filenames. This is (should be) a functionality of the 
underlying system calls.
On *ix based systems, the filenames are evaluated by the shell, not the 
OS, and your search result will be different in a lot of cases...


Ralf

---
This email has been checked for viruses by Avast antivirus software.
http://www.avast.com

___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] findfirst wildcards...

2014-12-03 Thread Bart
On 12/3/14, Ralf Quint freedos...@gmail.com wrote:

 On any DOS based OS (that includes OS/2 and Windows), the ? wildcard
 character will find any character, including no character at all in that
 position. So in your example, t?.txt will find t.txt and tx.txt but not
 txy.txt. It will not return any filename longer than your search mask,
 but return shorter filenames. This is (should be) a functionality of the
 underlying system calls.

Windows.FindFirstFile however treats ? as exactly 1 character AFAIK.
And is I'm not mistake this was also the case with TP in the old days.

Bart
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] findfirst wildcards...

2014-12-03 Thread Ralf Quint

On 12/3/2014 12:27 PM, Bart wrote:

On 12/3/14, Ralf Quint freedos...@gmail.com wrote:


On any DOS based OS (that includes OS/2 and Windows), the ? wildcard
character will find any character, including no character at all in that
position. So in your example, t?.txt will find t.txt and tx.txt but not
txy.txt. It will not return any filename longer than your search mask,
but return shorter filenames. This is (should be) a functionality of the
underlying system calls.

Windows.FindFirstFile however treats ? as exactly 1 character AFAIK.
And is I'm not mistake this was also the case with TP in the old days.

I do not have a working DOS on my Windows 8.1 laptop here right now, but 
as long as I can remember, the ? as always a match for one or none, 
allowing for a shorter filename as the filemask to be returned. The only 
exception that comes to my mind though is a the combination of ??*.txt 
for example, which would return all filenames at least two characters long,

A quick test in a Windows 8.1 command prompt:

 Directory of C:\Users\Ralf\x

12/03/2014  12:50 PMDIR  .
12/03/2014  12:50 PMDIR  ..
12/03/2014  12:49 PM 3 a.txt
12/03/2014  12:49 PM 3 aa.txt
12/03/2014  12:49 PM 3 aaa.txt
12/03/2014  12:50 PM 3 b.txt
12/03/2014  12:50 PM 3 bb.txt
12/03/2014  12:50 PM 3 bbb.txt
12/03/2014  12:50 PM 3 c.txt
12/03/2014  12:50 PM 3 cc.txt
12/03/2014  12:50 PM 3 ccc.txt
   9 File(s) 27 bytes
   2 Dir(s)  324,408,578,048 bytes free

C:\Users\Ralf\xdir ?.txt
 Volume in drive C is TI10673200G
 Volume Serial Number is 5E9D-3D3F

 Directory of C:\Users\Ralf\x

12/03/2014  12:49 PM 3 a.txt
12/03/2014  12:50 PM 3 b.txt
12/03/2014  12:50 PM 3 c.txt
   3 File(s)  9 bytes
   0 Dir(s)  324,408,578,048 bytes free

C:\Users\Ralf\xdir ??.txt
 Volume in drive C is TI10673200G
 Volume Serial Number is 5E9D-3D3F

 Directory of C:\Users\Ralf\x

12/03/2014  12:49 PM 3 a.txt
12/03/2014  12:49 PM 3 aa.txt
12/03/2014  12:50 PM 3 b.txt
12/03/2014  12:50 PM 3 bb.txt
12/03/2014  12:50 PM 3 c.txt
12/03/2014  12:50 PM 3 cc.txt
   6 File(s) 18 bytes
   0 Dir(s)  324,408,573,952 bytes free

C:\Users\Ralf\x


























---
This email has been checked for viruses by Avast antivirus software.
http://www.avast.com

___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] findfirst wildcards...

2014-12-03 Thread Bart
On 12/3/14, Ralf Quint freedos...@gmail.com wrote:

 On 12/3/2014 12:27 PM, Bart wrote:

 Windows.FindFirstFile however treats ? as exactly 1 character AFAIK.
 And is I'm not mistake this was also the case with TP in the old days.


 A quick test in a Windows 8.1 command prompt:

I don't dispute teh way cmd/command treats ? in dir, I merely stated
that the OS function FindFirstFile des not do it like that.
(And so we should not change FindFirst/FidNext behaviour.)

Bart
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] findfirst wildcards...

2014-12-03 Thread waldo kitty

On 12/3/2014 3:02 PM, Ralf Quint wrote:

On 12/3/2014 8:30 AM, waldo kitty wrote:

yes, i wrote t11.txt when i should have written t1.txt... my bad...

however on
  OS/2 native
  OS/2 with 4OS2 command interpreter replacement
  OS/2 DOS native
  OS/2 DOS with 4DOS command interpreter replacement
  Vista (32bit)
t?.txt returns both t.txt and t1.txt...


On any DOS based OS (that includes OS/2 and Windows), the ? wildcard character
will find any character, including no character at all in that position. So in
your example, t?.txt will find t.txt and tx.txt but not txy.txt. It will not
return any filename longer than your search mask, but return shorter filenames.
This is (should be) a functionality of the underlying system calls.
On *ix based systems, the filenames are evaluated by the shell, not the OS, and
your search result will be different in a lot of cases...


yep... that's exactly been my findings... my main goal, in this case, is/was to 
find a way of having multiple masks... messing with MatchesMaskList showed me 
the difference which i was trying to figure out as it was not what was expected...


now i have three choices and don't yet know which i'll choose... most likely the 
plain findfirst with multiple masks one... it works and its operation is as 
expected from ~30 years messing with computers... the regex one will definitely 
stay in the stack as it offers an easy method to go both ways and that may be 
desirable in some cases... i just have to test it on OS/2 and see if i can 
compile it... i can't do that with MatchesMaskList because the unit that 
contains it is not available on OS/2...


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


Re: [fpc-pascal] findfirst wildcards...

2014-12-03 Thread waldo kitty

On 12/3/2014 3:27 PM, Bart wrote:

On 12/3/14, Ralf Quint freedos...@gmail.com wrote:


On any DOS based OS (that includes OS/2 and Windows), the ? wildcard
character will find any character, including no character at all in that
position. So in your example, t?.txt will find t.txt and tx.txt but not
txy.txt. It will not return any filename longer than your search mask,
but return shorter filenames. This is (should be) a functionality of the
underlying system calls.


Windows.FindFirstFile however treats ? as exactly 1 character AFAIK.
And is I'm not mistake this was also the case with TP in the old days.


my command line testing shows otherwise... are you speaking of GUI related code? 
i'm working only with the command line... no GUI stuffs at all...



C:\freepascal\projects\misccmd
Microsoft Windows [Version 6.0.6002]
Copyright (c) 2006 Microsoft Corporation.  All rights reserved.

C:\freepascal\projects\miscdir t*.txt
 Volume in drive C is SQ004512V04
 Volume Serial Number is DC02-9142

 Directory of C:\freepascal\projects\misc

12/02/2014  11:31 PM 2 t.txt
12/02/2014  11:31 PM 2 t1.txt
12/02/2014  11:31 PM 2 t11.txt
   3 File(s)  6 bytes
   0 Dir(s)  50,785,431,552 bytes free

C:\freepascal\projects\miscdir t?.txt
 Volume in drive C is SQ004512V04
 Volume Serial Number is DC02-9142

 Directory of C:\freepascal\projects\misc

12/02/2014  11:31 PM 2 t.txt
12/02/2014  11:31 PM 2 t1.txt
   2 File(s)  4 bytes
   0 Dir(s)  50,785,431,552 bytes free

C:\freepascal\projects\misccommand
Microsoft(R) Windows DOS
(C)Copyright Microsoft Corp 1990-2001.

C:\FREEPA~1\PROJECTS\MISCdir t?.txt
 Volume in drive C is SQ004512V04
 Volume Serial Number is DC02-9142

 Directory of C:\FREEPA~1\projects\misc

12/02/2014  11:31 PM 2 t.txt
12/02/2014  11:31 PM 2 t1.txt
   2 File(s)  4 bytes
   0 Dir(s)  50,785,423,360 bytes free

C:\FREEPA~1\PROJECTS\MISC

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


Re: [fpc-pascal] findfirst wildcards...

2014-12-03 Thread waldo kitty

On 12/3/2014 5:09 PM, Bart wrote:

On 12/3/14, Ralf Quint freedos...@gmail.com wrote:


On 12/3/2014 12:27 PM, Bart wrote:



Windows.FindFirstFile however treats ? as exactly 1 character AFAIK.
And is I'm not mistake this was also the case with TP in the old days.




A quick test in a Windows 8.1 command prompt:


I don't dispute teh way cmd/command treats ? in dir, I merely stated
that the OS function FindFirstFile des not do it like that.
(And so we should not change FindFirst/FidNext behaviour.)


you are confusing me, now... is not the OS function the same as what the 
command interpreters use?? shouldn't the results be the same? as a ~30 year 
veteran with computers, i surely expect them to be the same... perhaps i'm just 
fscking old? ;)


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


Re: [fpc-pascal] findfirst wildcards...

2014-12-03 Thread Tomas Hajny
On Wed, December 3, 2014 23:18, waldo kitty wrote:
 .
 .
 desirable in some cases... i just have to test it on OS/2 and see if i can
 compile it... i can't do that with MatchesMaskList because the unit that
 contains it is not available on OS/2...

Which unit is it, btw? Have you tried compiling that unit for OS/2? The
fact that it hasn't been included with releases for OS/2 means just that
noone tested it there so far, not necessarily that it might not work
there...

Tomas


___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] findfirst wildcards...

2014-12-03 Thread Ralf Quint

On 12/3/2014 2:09 PM, Bart wrote:
I don't dispute teh way cmd/command treats ? in dir, I merely stated 
that the OS function FindFirstFile des not do it like that. (And so we 
should not change FindFirst/FidNext behaviour.)
Well, I have no way/time to do a more extensive test right now, but I am 
certain that this is the way the OS function is working ever since DOS 
1.x, which was the first version of DOS I used back in late '81/early 
'82. And I can't recall ever to have a different behavior between the 
internal system call and the command line. (Well, internal system calls 
handling paths since DOS 2.0 allow for use of both / and \ as 
directory delimiter, while the DOS/Windows shell commonly does not).
The only time that I had to deal with a decisively different behavior is 
on any *ix derived OS, which since the beginning of time (as far as 
computers go) has handled wildcards and FindFirst kind of calls 
differently and this is the main differences in code that are necessary 
for a lot of cross-platform applications that I have been writing for 
the last +30 years...


Ralf



---
This email has been checked for viruses by Avast antivirus software.
http://www.avast.com

___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] findfirst wildcards...

2014-12-03 Thread waldo kitty

On 12/3/2014 5:48 PM, Tomas Hajny wrote:

On Wed, December 3, 2014 23:18, waldo kitty wrote:
  .
  .

desirable in some cases... i just have to test it on OS/2 and see if i can
compile it... i can't do that with MatchesMaskList because the unit that
contains it is not available on OS/2...


Which unit is it, btw? Have you tried compiling that unit for OS/2? The
fact that it hasn't been included with releases for OS/2 means just that
noone tested it there so far, not necessarily that it might not work
there...


MatchesMaskList and its friends are in the Lazarus MASKS unit... since lazarus 
is not available for OS/2, i'm not looking for it to happen... then there's the 
difference in the way it operates compared to what is expected...


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


Re: [fpc-pascal] findfirst wildcards...

2014-12-03 Thread waldo kitty

On 12/3/2014 8:10 PM, waldo kitty wrote:

MatchesMaskList and its friends are in the Lazarus MASKS unit... since lazarus
is not available for OS/2, i'm not looking for it to happen... then there's the
difference in the way it operates compared to what is expected...


not the way it operates... that should say its output...

then there's the difference in its output compared to what is expected...


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


Re: [fpc-pascal] findfirst wildcards...

2014-12-03 Thread Sven Barth

On 03.12.2014 23:09, Bart wrote:

On 12/3/14, Ralf Quint freedos...@gmail.com wrote:


On 12/3/2014 12:27 PM, Bart wrote:



Windows.FindFirstFile however treats ? as exactly 1 character AFAIK.
And is I'm not mistake this was also the case with TP in the old days.




A quick test in a Windows 8.1 command prompt:


I don't dispute teh way cmd/command treats ? in dir, I merely stated
that the OS function FindFirstFile des not do it like that.
(And so we should not change FindFirst/FidNext behaviour.)


Both dir and FindFirstFile use the same OS functionality. And the 
markers are passed down as is to the filesystem drivers (so in theory 
there could be different behavior depending on the type of the 
filesystem; anyone tried the Ext2FS driver? ;) ).


Regards,
Sven

___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


[fpc-pascal] findfirst wildcards...

2014-12-02 Thread waldo kitty


how do you process for multiple filemasks?

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


== snip filemask.pas ==
Program Filemasks;

Uses
  SysUtils, StrUtils, Classes;

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

begin
  if paramstr(1)  '' then
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;
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+'');

//  finally
//if assigned(flist) then
//  freeandnil(flist);
//  end;
end
  else
writeln('please specify a file mask - eg: *.foo');
end.
== snip ==

as seen above, i also attempted to use try...finally in the above but fpc always 
complained about the next line...


Free Pascal Compiler version 2.6.4 [2014/03/02] for i386
Copyright (c) 1993-2014 by Florian Klaempfl and others
Target OS: OS/2
Compiling filemask.pas
filemask.pas(19,9) Error: Identifier not found try
filemask.pas(19,9) Fatal: Syntax error, ; expected but identifier FLIST 
found
Fatal: Compilation aborted
Error: X:\FP\2.6.4\BIN\OS2\ppc386.exe returned an error exitcode (normal if you 
did not specify a source file to be compiled)


what am i missing?? i've never really used this capability before...

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


Re: [fpc-pascal] findfirst wildcards...

2014-12-02 Thread Bart
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()?

Bart
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] findfirst wildcards...

2014-12-02 Thread waldo kitty

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()?


in the above masks, any '*' returns too many unwanted files... after some hours 
of experimenting i finally figured out that using '?' works better but in some 
cases, it can also return unwanted files (shorter filenames) than desired...


i'm not aware of MatchesMaskList but i will hunt it down and see if it helps...

thanks! ;)

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


Re: [fpc-pascal] findfirst wildcards...

2014-12-02 Thread waldo kitty

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()?


i can't find anything that is relevant or easy to understand... everything i've 
found seems to be pointing to lazarus code but i don't have lazarus code 
available on all systems this code will be compiled on :/


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


Re: [fpc-pascal] findfirst wildcards...

2014-12-02 Thread waldo kitty

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