About chdir... and directory/file storage

George Simon george at worldest.com
Thu Sep 2 07:26:35 PDT 2004


John, I have absolutely no interest (at the present time) in what you are
talking about here, but the time and effort you put into trying to help
others. The clarity of your code examples, and the way you explain what you
are doing and why you are doing it, is something that I have always admired.
I want to publicly thank you for all the things you have taught me over the
many years of simply reading your posts.  Keep up the good work and thanks a
bunch!

George Simon (IT Department)
American River Logistics, LTD
614 Progress St.
Elizabeth, NJ  07205
Phone:(908)354-7746      Fax:(908)354-7491
mailto:george at worldest.com
http://www.americanriverintl.com/



-----Original Message-----
From: filepro-list-bounces at lists.celestial.com
[mailto:filepro-list-bounces at lists.celestial.com]On Behalf Of John Esak
Sent: Thursday, September 02, 2004 6:40 AM
To: filePro mailing list
Subject: About chdir... and directory/file storage


Richard (and others),

I know you may not be able to change your scheme for storing files from EDI,
but this may help in some way... Here's how I do it. (As usual, I try and
work _within_ filePro so there is no reliance on platform based utilities.)

The problem of EDI and storing so much incoming data is very important. It
is necessary to store the files that arrive daily in some manner that makes
sense and can be dealt with easily as time goes by, days, months, years.
That is why I took some time to develop this scheme. It has saved me untold
headaches over the past several years. I have to deal with both DOS and Unix
so it deals with the slash/backslash thing in a way that makes sense to me,
in that it works on both sides. Admittedly, there are many different ways to
handle this and there are times when a / will work equally well on both
platforms... still, this is how I handled it. More to the point of the
actual traversing of directories, I adopted the following procedure.

On any day that files come into the system, I put them in a directory with a
hierarchy of that year, that month and then that day with a batch number
from 1 to 100, so that multiple incoming files for each day can be
accommodated. To do this, I have filePro check to see if the full dirpath is
already there, if so, I use it. If not, I create the path, whether it be
just to add a new month to the current year, or to add a new year if it
doesn't exist and then add the new month as well. Happily, the system has
been working for quite some time now without any attendance from me. I have
directories (and files) which look like this now and it is very easy to
traverse them with filePro processes _and_ human-applied searches with "cd".
I can find anything quickly by date and that is the name of the game. (Also,
more importantly, they can be traversed by either Windows filePro or Unix
filePro.) These are not exact portrayals of the directories created in the
processing, but close, just to give you the idea...

    /u/edi/ups/arch/inv/01/01/invbat01.dat
    /u/edi/ups/arch/inv/01/01/invbat02.dat
    /u/edi/ups/arch/inv/01/02/invbat01.dat
    /u/edi/ups/arch/inv/01/02/invbat01.dat
    /u/edi/ups/arch/inv/01/12/invbat01.dat
    /u/edi/ups/arch/inv/02/01/invbat01.dat
    /u/edi/ups/arch/inv/02/01/invbat02.dat
    /u/edi/ups/arch/inv/02/02/invbat01.dat
    /u/edi/ups/arch/inv/02/02/invbat01.dat
    /u/edi/ups/arch/inv/02/12/invbat01.dat
and
    /u/edi/ups/arch/po/01/01/invbat01.dat
    /u/edi/ups/arch/po/01/01/invbat02.dat
    /u/edi/ups/arch/po/01/02/invbat01.dat
    /u/edi/ups/arch/po/01/02/invbat01.dat
    /u/edi/ups/arch/po/01/12/invbat01.dat
    /u/edi/ups/arch/po/02/01/invbat01.dat
    /u/edi/ups/arch/po/02/01/invbat02.dat
    /u/edi/ups/arch/po/02/02/invbat01.dat
    /u/edi/ups/arch/po/02/02/invbat01.dat
    /u/edi/ups/arch/po/02/12/invbat01.dat


Here is the processing which does the directory/file allocation. I hope it
helps. Without doing things in this way, any data collection method would be
extremely limited in helping "humans" to find files when required. If any
part of this code is not understandable to anyone, feel free to ask.


     filePro File: npi_edi_ups_run
 Processing Table: quick
    Last Modified: Thursday - Sep  2, 2004 at  6:09 AM
       Documented: Thursday - Sep  2, 2004 at  6:11 AM

    1  Then: end
errout   If: 'errout
    2  Then:
    3  Then: close;  exit
@once    If: '@once
    4  Then:
    5  Then: lookup ctrl=npi_edi_ups_ctl r=("1")
    6  Then: declare sls(1);  sls=chr("92")
    7  Then: declare rec_dl(1), fld_dl(1), seg_dl(1)
    8  Then: 'fld_dl="^";  rec_dl="~";  seg_dl=">"
    9  Then: fld_dl="*";  rec_dl="~";  seg_dl=">"
   10  Then: declare DirShare, DirIn, DirOut, DirArc, DirArcCat, DirArcIn,
             DirArcOut
   11  Then: DirShare="u:";  DirIn="inbox";  DirOut="outbox";
DirArc="archive"
   12  Then: DirArcCat="inv"
   13  Then: DirArcIn=DirArc{sls{DirArcCat{sls{"in";  DirArcOut=
             DirArc{sls{DirArcCat{sls{"out"
   14  Then: declare DosPathWork; DosPathWork=

"c:"{sls{"progra~1"{sls{"peregrine"{sls{"trustedlink"{sls{"work"
   15  Then: declare SysCommand
   16  Then: declare DirStamp
   17  Then: declare InStamp(8)
   18  Then: declare InNum(3,.2), InDate(6,ymd)
   19  Then: declare count(2,.0);  count="1"
   20  Then: InDate=@td
   21  Then: lookup bat = npi_edi_ups_invbatch  k=(InDate) i=a -nx
morbat   If: not bat
   22  Then: goto getit
         If: bat(1) ne InDate
   23  Then: goto getit
   24  Then: count=count+"1";  getnext bat;  goto morbat
getit    If: 'getit
   25  Then:
   26  Then: InNum=count/"100"
   27  Then: lookup bat=npi_edi_ups_invbatch r=free
   28  Then: bat(1)=InDate;  bat(2)=InNum;  write bat
   29  Then: InStamp=InDate & mid(InNum,"2","2")
   30  Then: 'test the dirs
   31  Then: declare year(2),  month(2)
   32  Then: Year=mid(InDate,"1","2");  Month=mid(InDate,"3","2")
   33  Then: declare DirYear, DirMonth
   34  Then: DirYear=DirShare { sls { DirArcIn { sls { Year
   35  Then: DirMonth=DirShare { sls { DirArcIn { sls { Year { sls { Month
tstYR    If: exists(DirYear) eq "1"
   36  Then:
tstMO    If: exists(DirMonth) eq "1"
   37  Then:
         If: not tstYR
   38  Then: system noredraw "mkdir" < DirYear
         If: not tstMO
   39  Then: system noredraw "mkdir" < DirMonth
   40  Then: declare FullPath1, FullPath2
   41  Then: FullPath1=DosPathWork { sls { "output.dat"
   42  Then: declare file_is_inv(1);  file_is_inv=""
         If: 'maybe use later
   43  Then: 'gosub tst4inv
         If: 'file_is_inv eq "N"
   44  Then: 'goto errout
   45  Then: FullPath2=Dirshare { sls { DirIn { sls { "inv_infile.dat"
   46  Then: SysCommand="copy" < FullPath1 < FullPath2
         If: 'jje remove comment for production
   47  Then: system SysCommand
   48  Then: FullPath2=DirMonth { sls { InStamp { ".dat"
   49  Then: SysCommand="copy" < FullPath1 < FullPath2
         If: 'jje
   50  Then: system SysCommand
   51  Then: '
   52  Then: 'file manipulation starts her
   53  Then: declare infile(256), outfile(256)
   54  Then: declare outline
   55  Then: declare h_i(4,.0), h_o(4,.0), h_ow(4,.0),  h_c(4,.0), h_s(8,.0)
   56  Then: infile=DirShare { sls { DirIn { sls { "inv_infile.dat";
outfile=
             DirShare { sls { DirOut { sls { "inv.out1"
   57  Then: '
   58  Then: declare there(4,.0)
   59  Then: there=exists(infile)
         If: there eq "0"
   60  Then: goto errout
   61  Then: h_o=open(outfile,"rw0tc")
loop     If:
   62  Then: import ascii inf=(infile) f=255 r=~
         If: not inf
   63  Then: close inf;  h_c=close(h_o);  goto pass2
         If: 'mid(inf(1),"1","3") eq "IEA"
   64  Then: 'debug on
         If: 'for files without newlines
   65  Then: 'outline="" { inf(1) { rec_dl { chr("10") { ""
         If: 'for files with newlines!  windows\stx32.ini newline=1
   66  Then: outline="" { inf(1) { rec_dl { ""
   67  Then: h_ow=write(h_o,outline)
   68  Then: goto loop




_______________________________________________
Filepro-list mailing list
Filepro-list at lists.celestial.com
http://mailman.celestial.com/mailman/listinfo/filepro-list



More information about the Filepro-list mailing list