dynamic import types

Bruce Easton bruce at stn.com
Mon Apr 24 20:47:23 PDT 2017


Yeah - like export, referencing the same file would only work if you use 
different aliases.  So if I had a screen where I capture the full file 
path and either "csv" or "tab" (to use two of your types), and those 
were sent to a called table via global vars in an input table, then the 
called table could capture from the appropriate import file, but you'd 
have to make a set of assignments for each file type:

Then: declare extern api_data_format
      If:
Then: declare extern impFile
      If: api_data_format ne "csv"
Then: goto trytab
rptidc If:     'csv file processing
Then: import word idc = (impFile)
      If: not idc
Then: goto closidc
      If:
Then: lookup newdat = impdata@  r=free  -e
      If:
Then: newdat(1)=idc(1); newdat(2)=idc(2); goto rptidc
closidc If: newdat
Then: close newdat
      If:
Then: end
trytab If: api_data_format ne "tab"
Then: end
rptidt     'tab file processing
Then: import ascii idt = (impFile)  f=\t r=\n
      If: not idt
Then: goto closidt
      If:
Then: lookup newdat = impdata@  r=free  -e
      If:
Then: newdat(1)=idt(1); newdat(2)=idt(2); goto rptidt
closidt If: newdat
Then: close newdat
      If:
Then: end

I guess a possible advantage would be if there is a variation in the 
layout between file types, then you'd need the extra set of assignments 
anyway.  And if you had several different clients who supplied the same 
data, but with differently ordered layouts, I suppose something like the 
code above could work if, for the free-record lookups, you declared an 
array against it, and before assigning, referenced a filepro file that 
would be keyed by client and provided the hash of field assignments for 
each client and field.  In that case, you could capture and pass the 
client code into here and still run this same code.  I guess also in 
such a case the assignments would be more like:

Then: lookup reffile = (clihash)  k=(clicode) i=A -ng
      If: not reffile
Then; goto dunrefl
      If: reffile(1) ne clicode
Then: goto dunrefl
Then: nn=reffile(3)
If: reffile(2) eq "1"
Then: arr[nn]=idc(1)
If: reffile(2) eq "2"
Then: arr[nn]=idc(2)
Then: getnext reffile; goto refloo
dunrefl
.
. etc. , where "arr" is dimensioned against "newdat", where nn would 
loop (getnext) from 1 to the highest field# in the reference file for 
the client (in say field 3 there) and would indicate the target field to 
be assigned.

reffile could look like:

Client(1)    imp fld#(2)   asign_to(3)
XYZ          1              1
XYZ          2              3
ABC          1              3
ABC          2              2

Or, like you say - go with separate called tables.





On 4/24/17 7:21 PM, Brian K. White via Filepro-list wrote:
>
>   If: api_data_format eq "csv"
> Then: import word idf = (impFile)
>   If: api_data_format eq "pipe_delimited"
> Then: import ascii idf = (impFile) f=| r=\n
>   If: api_data_format eq "tab_delimited"
> Then: import ascii idf = (impFile) f=\t r=\n
>
>
> import ascii idf = (impFile) f=| r=\n
>                             ^
> Merge name incompatibility.
> Word processor or spreadsheet merge has been given two different names.
>
> Dangit, is there a nice way around this or do I have to give up on 
> this idea and just pick one?
>
> I mean yeah I suppose I could write 3 tiny tables and CALL the right 
> one, or write out a temp version of the full table and chain to it or 
> something, but I mean short of unnecessarily Goldbergian things like 
> that. Actually the call idea might not be too bad after all, as long 
> as no one else is CALLing this table itself, which I am pretty sure 
> about but not 100% sure about. It does contain some comments that 
> imply passing long variables back to a parent, but that could just be 
> poorly written comments, especially since they appear above a stack of 
> explicit DECLARE LOCAL, hello, local... not extern or global or 
> unspecified. Anyway not interesting, sorry.
>
> Then: declare fpit, fpid
>   If: api_data_format eq "csv"
> Then: fpit = "word" ; fpid = ""
>   If: api_data_format eq "pipe_delimited"
> Then: fpit = "ascii" ; fpid = "f=| r=\n"
>   If: api_data_format eq "tab_delimited"
> Then: fpit = "ascii" ; fpid = "f=\t r=\n"
>   If:
> Then: import (fpit) idf = (impFile) (fpid)
>
>
> import (fpit) idf= (impFile) (fpid)
>        ^
> Process contains a syntax error at position indicated.
>
> ...I guess not that way ;)  I kind knew that wouldn't work, just worth 
> a shot since it was easy to try.
>
> ... well, I am receiving these data files via php cgi script, so I can 
> do the translation both ways in there, the same way I'm already doing 
> for line endings. Take in whatever, feed only one consistent format to 
> filepro. This would just be more of the same. So I guess it's no loss 
> to pick one format for use inside the table after all. The exterior 
> facing api would still allow any, which is all that matters.
>



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



More information about the Filepro-list mailing list