On 26-Dec-2014 09:21 -0600, rob@xxxxxxxxx wrote:
You are trying to convert from an IFS file to a DB file.
So perhaps just use Copy From Import File (CPYFRMIMPF); i.e. use the
Import utility, to _import_ the [likely previously exported] text data
into a pre-created database file member.?
Therefore the IFS file (by that I assume you mean a stream file
outside of the QSYS.LIB file system) already has its "number of
records" determined. <<SNIP>> And stream files have no
concept of 'records'. <<SNIP>>
A text stream [a STMF of text data] has the concept of records; only
a binary stream would not support the record concept, except perhaps a
logical fixed-length representation. The problem however is much like
with any /flat-file/, what defines the data determines also what defines
the /records/ of the file; that could be a logical record length, an
End-Of-Record (EOR) delimiter [of some number of bytes\characters], or
whatever the programmer might dream up. The /convention/ however, is
that the /record/ is what is delimited by the conventional *EOR;
typically that is the <CRLF> or <LF> and according to the convention of
the OS wherein the program /wrote/ the text file.
<<SNIP setup for test.txt with three ['3'] records>>
So now I see you are looking to retrieve that '3'.
So, when I run
qsh cmd('cat /rob/test.txt | wc -l')
in an interactive session the following displays on the screen:
3
Press ENTER to end terminal session.
When I run
qsh cmd('cat /rob/test.txt | wc -l')
in a batch session.
SBMJOB CMD(QSH CMD('cat /rob/test.txt | wc -l'))
Job 420557/ROB/QDFTJOBD submitted to job queue QBATCH
wrkJob 420557/ROB/QDFTJOBD
4. Work with spooled files
I get a spool file with one row displaying 3 in it.
Run interactively, with a prior override to Standard Output (STDOUT),
is discussed in other replies. The override of the StdOut could be to
either a database file [Override With Database File (OVRDBF)] to cause
the output to be directed to a row of a database file or a printer file
[Override With Printer File (OVRPRTF)] to cause the output to be
directed to a record of a spool file.
I tried a few things
qsh cmd('cat /rob/test.txt | wc -l > /qsys.lib/qtemp.lib/mydtaara.dtaara')
Command ended normally with exit status 2.
The previously discussed _datarea_ utility [in other replies] would
be used to write to a *DTAARA object. And although the stream file
read\write capabilities do not directly support the Data Area object
[thus why the datarea utility would be used to effect that], there is
support for the User Space (USRSPC) object type. Properly identifying a
*USRSPC object with IFS naming and the use of a permanent library name
could succeed without errors; a side bonus, is that the automatic
creation of the User Space object occurs, so there is no requirement to
pre-create the object as with a DBF member. So for example:
'cat test.txt | wc -l > /qsys.lib/rob.lib/myusrspc.usrspc'
qsh cmd('cat /rob/test.txt | wc -l > /qsys.lib/qtemp.lib/mytable.file')
Command ended normally with exit status 2.
Nothing wrong with the above, at least conceptually. The issues with
what was tried however, are with each of: the use of QTEMP, the failure
to identify a "file" [in the non-/QSYS.LIB sense; i.e. distinct from the
*FILE] as target for the data rather than a directory [must specify a
member as target, not a file], and the database *FILE object must be
pre-created. The database *FILE [object type of the /QSYS.LIB],
functionally serves as a directory within the IFS nomenclature, not as a
"file".
qsh cmd('cat /rob/test.txt | wc -l > /rob/RecordCount.txt')
Command ended normally with exit status 0.
So directing the output to a data area or a db2 file wasn't going to
happen. Directing it to a stream file was OK though.
Which leaves you a couple of choices.
<<SNIP>>
Hopefully my prior comments help elucidate, so as to suggest the
choices are not so narrow as might have been implied by the quoted text.