View previous topic :: View next topic
Author
Message
andyc13319 New User Joined: 06 Oct 2020Posts: 1 Location: Thaland
Hi! I am new around here.
I would like to create a file with only one record containing record counts from 10 input files. I tried using the ICETOOL's COUNT operator;
Code:
COUNT FROM(INFILE1) WRITE(OUTFILE)
COUNT FROM(INFILE2) WRITE(OUTFILE)
COUNT FROM(INFILE3) WRITE(OUTFILE)
.
.
.
COUNT FROM(INFILE10) WRITE(OUTFILE)
It just produces 10 records (15 byes each) to the OUTFILE
Code:
000000000000010
000000000000020
000000000000015
.
.
But I'd rather have all of them in just one record separated the counts with a '|' and the total length of OUTFLE must be 159 bytes.
Code:
000000000000010|000000000000020|000000000000015| .....
Is it possible to do that in just one ICETOOL step?
Thank you very much
Code'd
Back to top
Rohit Umarjikar Global Moderator Joined: 21 Sep 2010Posts: 3049 Location: NYC,USA
Welcome!
What matters is in how many passes you do than doing in one step, You can try passing Count output to RESIZE in the same step or write another step.
You can use the RESIZE operator of DFSORT's ICETOOL to create one long record from many short ones.
Back to top
sergeyken Senior Member Joined: 29 Apr 2008Posts: 2012 Location: USA
In SYNCSORT, there is an option MULTIIN; it could be used to get this result.
In DFSORT/ICETOOL, from the first sight it looks like that cannot be done in one step...
I’m lazy to spend more time on this quite senseless and useless requirement, sorry.
Back to top
Joerg.Findeisen Senior Member Joined: 15 Aug 2015Posts: 1231 Location: Bamberg, Germany
sergeyken wrote:
In DFSORT/ICETOOL, from the first sight it looks like that cannot be done in one step...
I think it can be done in DFSORT, but need a bit more time to elaborate.
Back to top
Joerg.Findeisen Senior Member Joined: 15 Aug 2015Posts: 1231 Location: Bamberg, Germany
May it be of help
Code:
//WHATEVER EXEC PGM=ICETOOL
//IN DD *
01SAMANTHA NNYY112 DEV1PROGRAMMER
01SAMANTHA NNYY112 DEV2MANAGER
01 MICHAEL NNYY121 DEV1PROGRAMMER
01 JAMES YNNY341 MGR4EXECUTIVE
/*
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//WHATEVER DD DISP=(MOD,PASS),LRECL=160
//SUMM DD SYSOUT=*,LRECL=159
//TOOLIN DD *
COPY FROM(IN) TO(WHATEVER) USING(#001)
COPY FROM(IN) TO(WHATEVER) USING(#002)
COPY FROM(IN) TO(WHATEVER) USING(#003)
COPY FROM(IN) TO(WHATEVER) USING(#004)
COPY FROM(IN) TO(WHATEVER) USING(#005)
COPY FROM(IN) TO(WHATEVER) USING(#006)
COPY FROM(IN) TO(WHATEVER) USING(#007)
COPY FROM(IN) TO(WHATEVER) USING(#008)
COPY FROM(IN) TO(WHATEVER) USING(#009)
COPY FROM(IN) TO(WHATEVER) USING(#010)
SPLICE FROM(WHATEVER) TO(SUMM) ON(160,1,CH) WITHANY USING(NUTS) -
WITH(001,16) WITH(017,16) WITH(033,16) WITH(049,16) WITH(065,16) -
WITH(081,16) WITH(097,16) WITH(113,16) WITH(129,16) WITH(145,15)
/*
//#001CNTL DD *
OPTION COPY
OUTFIL NODETAIL,REMOVECC,BUILD=(160:X),
TRAILER1=(1:COUNT=(M11,LENGTH=15),C'!',160:C'!')
/*
//#002CNTL DD *
OPTION COPY
OUTFIL NODETAIL,REMOVECC,BUILD=(160:X),
TRAILER1=(17:COUNT=(M11,LENGTH=15),C'!',160:C'!')
/*
//#003CNTL DD *
OPTION COPY
OUTFIL NODETAIL,REMOVECC,BUILD=(160:X),
TRAILER1=(33:COUNT=(M11,LENGTH=15),C'!',160:C'!')
/*
//#004CNTL DD *
OPTION COPY
OUTFIL NODETAIL,REMOVECC,BUILD=(160:X),
TRAILER1=(49:COUNT=(M11,LENGTH=15),C'!',160:C'!')
/*
//#005CNTL DD *
OPTION COPY
OUTFIL NODETAIL,REMOVECC,BUILD=(160:X),
TRAILER1=(65:COUNT=(M11,LENGTH=15),C'!',160:C'!')
/*
//#006CNTL DD *
OPTION COPY
OUTFIL NODETAIL,REMOVECC,BUILD=(160:X),
TRAILER1=(81:COUNT=(M11,LENGTH=15),C'!',160:C'!')
/*
//#007CNTL DD *
OPTION COPY
OUTFIL NODETAIL,REMOVECC,BUILD=(160:X),
TRAILER1=(97:COUNT=(M11,LENGTH=15),C'!',160:C'!')
/*
//#008CNTL DD *
OPTION COPY
OUTFIL NODETAIL,REMOVECC,BUILD=(160:X),
TRAILER1=(113:COUNT=(M11,LENGTH=15),C'!',160:C'!')
/*
//#009CNTL DD *
OPTION COPY
OUTFIL NODETAIL,REMOVECC,BUILD=(160:X),
TRAILER1=(129:COUNT=(M11,LENGTH=15),C'!',160:C'!')
/*
//#010CNTL DD *
OPTION COPY
OUTFIL NODETAIL,REMOVECC,BUILD=(160:X),
TRAILER1=(145:COUNT=(M11,LENGTH=15),160:C'!')
/*
//NUTSCNTL DD *
OUTFIL BUILD=(1,159)
/*
Output:
Code:
****** **************************** Datenanfang *******************************..
000000 000000000000004!000000000000004!000000000000004!000000000000004!00000000..
****** **************************** Datenende *********************************..
Back to top
sergeyken Senior Member Joined: 29 Apr 2008Posts: 2012 Location: USA
A strange “requirement” of TS was, to do this “in a single step”...
Remains unclear: the JCL step, or SORT step??
Back to top
sergeyken Senior Member Joined: 29 Apr 2008Posts: 2012 Location: USA
Joerg.Findeisen wrote:
May it be of help
Code:
//WHATEVER EXEC PGM=ICETOOL
//IN DD *
01SAMANTHA NNYY112 DEV1PROGRAMMER
01SAMANTHA NNYY112 DEV2MANAGER
01 MICHAEL NNYY121 DEV1PROGRAMMER
01 JAMES YNNY341 MGR4EXECUTIVE
/*
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//WHATEVER DD DISP=(MOD,PASS),LRECL=160
//SUMM DD SYSOUT=*,LRECL=159
//TOOLIN DD *
COPY FROM(IN) TO(WHATEVER) USING(#001)
COPY FROM(IN) TO(WHATEVER) USING(#002)
COPY FROM(IN) TO(WHATEVER) USING(#003)
COPY FROM(IN) TO(WHATEVER) USING(#004)
COPY FROM(IN) TO(WHATEVER) USING(#005)
COPY FROM(IN) TO(WHATEVER) USING(#006)
COPY FROM(IN) TO(WHATEVER) USING(#007)
COPY FROM(IN) TO(WHATEVER) USING(#008)
COPY FROM(IN) TO(WHATEVER) USING(#009)
COPY FROM(IN) TO(WHATEVER) USING(#010)
SPLICE FROM(WHATEVER) TO(SUMM) ON(160,1,CH) WITHANY USING(NUTS) -
WITH(001,16) WITH(017,16) WITH(033,16) WITH(049,16) WITH(065,16) -
WITH(081,16) WITH(097,16) WITH(113,16) WITH(129,16) WITH(145,15)
/*
//#001CNTL DD *
OPTION COPY
OUTFIL NODETAIL,REMOVECC,BUILD=(160:X),
TRAILER1=(1:COUNT=(M11,LENGTH=15),C'!',160:C'!')
/*
//#002CNTL DD *
OPTION COPY
OUTFIL NODETAIL,REMOVECC,BUILD=(160:X),
TRAILER1=(17:COUNT=(M11,LENGTH=15),C'!',160:C'!')
/*
//#003CNTL DD *
OPTION COPY
OUTFIL NODETAIL,REMOVECC,BUILD=(160:X),
TRAILER1=(33:COUNT=(M11,LENGTH=15),C'!',160:C'!')
/*
//#004CNTL DD *
OPTION COPY
OUTFIL NODETAIL,REMOVECC,BUILD=(160:X),
TRAILER1=(49:COUNT=(M11,LENGTH=15),C'!',160:C'!')
/*
//#005CNTL DD *
OPTION COPY
OUTFIL NODETAIL,REMOVECC,BUILD=(160:X),
TRAILER1=(65:COUNT=(M11,LENGTH=15),C'!',160:C'!')
/*
//#006CNTL DD *
OPTION COPY
OUTFIL NODETAIL,REMOVECC,BUILD=(160:X),
TRAILER1=(81:COUNT=(M11,LENGTH=15),C'!',160:C'!')
/*
//#007CNTL DD *
OPTION COPY
OUTFIL NODETAIL,REMOVECC,BUILD=(160:X),
TRAILER1=(97:COUNT=(M11,LENGTH=15),C'!',160:C'!')
/*
//#008CNTL DD *
OPTION COPY
OUTFIL NODETAIL,REMOVECC,BUILD=(160:X),
TRAILER1=(113:COUNT=(M11,LENGTH=15),C'!',160:C'!')
/*
//#009CNTL DD *
OPTION COPY
OUTFIL NODETAIL,REMOVECC,BUILD=(160:X),
TRAILER1=(129:COUNT=(M11,LENGTH=15),C'!',160:C'!')
/*
//#010CNTL DD *
OPTION COPY
OUTFIL NODETAIL,REMOVECC,BUILD=(160:X),
TRAILER1=(145:COUNT=(M11,LENGTH=15),160:C'!')
/*
//NUTSCNTL DD *
OUTFIL BUILD=(1,159)
/*
Output:
Code:
****** **************************** Datenanfang *******************************..
000000 000000000000004!000000000000004!000000000000004!000000000000004!00000000..
****** **************************** Datenende *********************************..
Why not to create the same TRAILER=(1,COUNT=...
and using the same USING(#001) ?
Next the SPLICE would work with the same positions of each record, isn’t it?
Back to top
Joerg.Findeisen Senior Member Joined: 15 Aug 2015Posts: 1231 Location: Bamberg, Germany
I need to look up your suggestions, thank you for them. The code can be optimized to get rid of the more or less repeating TRAILER1 parts for sure. The SPLICE itself can not be shortened I think, but replaced by RESIZE as Rohit has suggested earlier.
Back to top
Joerg.Findeisen Senior Member Joined: 15 Aug 2015Posts: 1231 Location: Bamberg, Germany
Another one:
Code:
//WHATEVER EXEC PGM=ICETOOL
//IN DD *
01SAMANTHA NNYY112 DEV1PROGRAMMER
01SAMANTHA NNYY112 DEV2MANAGER
01 MICHAEL NNYY121 DEV1PROGRAMMER
01 JAMES YNNY341 MGR4EXECUTIVE
/*
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//WHATEVER DD DISP=(MOD,PASS),LRECL=16
//SUMM DD SYSOUT=*,LRECL=159
//TOOLIN DD *
COPY FROM(IN) USING(CRAP)
COPY FROM(IN) USING(CRAP)
COPY FROM(IN) USING(CRAP)
COPY FROM(IN) USING(CRAP)
COPY FROM(IN) USING(CRAP)
COPY FROM(IN) USING(CRAP)
COPY FROM(IN) USING(CRAP)
COPY FROM(IN) USING(CRAP)
COPY FROM(IN) USING(CRAP)
COPY FROM(IN) USING(CRAP)
RESIZE FROM(WHATEVER) TO(SUMM) TOLEN(160) USING(NUTS)
/*
//CRAPCNTL DD *
OPTION COPY
OUTFIL FNAMES=(WHATEVER),REMOVECC,NODETAIL,
TRAILER1=(COUNT=(M11,LENGTH=15),C'!')
/*
//NUTSCNTL DD *
OUTFIL BUILD=(1,159)
/*
Output:
Code:
********************************* TOP OF DATA **********************************..
000000000000004!000000000000004!000000000000004!000000000000004!000000000000004!..
******************************** BOTTOM OF DATA ********************************..
Back to top
Please enable JavaScript!