opendir() and @dirlist()

Bob Stockler bob at trebor.iglou.com
Tue Nov 15 11:53:35 PST 2005


Enrique Arredondo wrote (on Tue, Nov 15, 2005 at 11:00:41AM -0800):

| As well as folder names greater than 32 are omited. This really sucks. If 
| it was just 100 files I was dealing with wouldn't be a major disaster but I 
| have thousands of files which are generated using an automated system 
| that's running on the fly and all of this ends up in a web "document 
| management system" page. This is what happens when you want to use filepro 
| for everything.
| Anyway I'll try the "ls > file" option suggested by Bob Stockler meanwhile 
| I'll pray to all the Gods of the Cosmos so that filepro tech support 
| accepts the need to increment the size from 32 to match the OS and delivers 
| a quick new revision of *clerk. In less than 1 week ???

Henry, don't count on it.  The 32 length filename limitation is a
result of these routines being written for the express purpose of
working with filePro files (whose names have a maximum 32 character
length), and not as generalized tools.

But filePro has provided other tools, as I suggested, that will work
(and I think are easier to use).  As it happens, I had a few minutes
to play around with it this morning, and wrote this to demonstrate:

@MENU    If: 
    1  Then: dim Array[32000] ' assure enough elements for the number of files
    2  Then: gosub DoIt
    3  Then: Cnt = listbox(Array,"1",Cnt1) ' Processing of files goes here
    4  Then: exit
DoIt     If: 
    5  Then: Cwd = getcwd()
    6  Then: Target_Dir = getenv["Target_Directory"] ' or assign target
             directory
    7  Then: chdir Target_Dir
DOS      If: @os eq "DOS"
    8  Then: List_Cmd = "dir /b" ; Temp = "C:\temp\files.tmp"
NIX      If: NOT DOS
    9  Then: List_Cmd = "ls" ; Temp = "/tmp/files.tmp"
   10  Then: system noredraw List_Cmd < ">" < Temp
   11  Then: Handle = open(Temp,"tr") ; Cnt1 = "1"
         If: Handle lt "0"
   12  Then: goto Done
GetName  If: 
   13  Then: Cnt = readline(Handle,Misc,"256") ; Array[Cnt1] = Misc
         If: Misc gt ""
   14  Then: Cnt1 = Cnt1 + "1" ; goto GetName
   15  Then: Cnt = close(Handle) ; Cnt = remove(Temp) ; chdir Cwd ; return
Done     If: 
   16  Then: errorbox "\n Could not open the file" < Temp { ". \n " ; exit
   17  Then: declare Cnt(8,.0) ; declare Cnt1(8,.0) ; declare Cwd ; declare
             Handle(8,.0)
   18  Then: declare List_Cmd ; declare Misc ; declare Target_Dir ; declare
             Temp

And here's the processing table you can easily try out:

@MENU::dim Array[32000] ' assure enough elements for the number of files:
::gosub DoIt:
::Cnt = listbox(Array,"1",Cnt1) ' Processing of files goes here:
::exit:
DoIt::Cwd = getcwd():
::Target_Dir = getenv["Target_Directory"] ' or assign target directory:
::chdir Target_Dir:
DOS:@os eq "DOS":List_Cmd = "dir /b" ; Temp = "C\temp\files.tmp":
NIX:NOT DOS:List_Cmd = "ls" ; Temp = "/tmp/files.tmp":
::system noredraw List_Cmd < ">" < Temp:
::Handle = open(Temp,"tr") ; Cnt1 = "1":
:Handle lt "0":goto Done:
GetName::Cnt = readline(Handle,Misc,"256") ; Array[Cnt1] = Misc:
:Misc gt "":Cnt1 = Cnt1 + "1" ; goto GetName:
::Cnt = close(Handle) ; Cnt = remove(Temp) ; chdir Cwd ; return:
Done::errorbox "\n Could not open the file" < Temp { ". \n " ; exit:
::declare Cnt(8,.0) ; declare Cnt1(8,.0) ; declare Cwd ; declare Handle(8,.0):
::declare List_Cmd ; declare Misc ; declare Target_Dir ; declare Temp:

If you cut and paste it, change the ^A's (<Caret>+A's) in
it to <Ctrl>+A.

If you have filenames longer than 256 characters, change the
256 in line 13 to whatever is required to accomodate them.

Put it in any filePro File directory, edit it to point to a
directory of interest, and execute:

  $PFPROG/fp/dclerk fPfilename -sAnyScreen -y '' -z tablename

and try it out (and let me know how you like it).

It should work on Windows, but was tested only on UNIX.

Bob

-- 
Bob Stockler  +-+  bob at trebor.iglou.com  +-+  http://members.iglou.com/trebor
Author: MENU EDIT II - The BEST Creator/Editor/Manager for filePro User Menus.
Fully functional (time-limited) demos available by email request (specify OS).


More information about the Filepro-list mailing list