IBM Mainframe Forum Index
 
Log In
 
IBM Mainframe Forum Index Mainframe: Search IBM Mainframe Forum: FAQ Register
 

Creating a single-record file with COUNT from multiple input


IBM Mainframe Forums -> DFSORT/ICETOOL
Post new topic   Reply to topic
View previous topic :: View next topic  
Author Message
andyc13319

New User


Joined: 06 Oct 2020
Posts: 1
Location: Thaland

PostPosted: Tue Oct 06, 2020 8:19 pm
Reply with quote

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
View user's profile Send private message
Rohit Umarjikar

Global Moderator


Joined: 21 Sep 2010
Posts: 3049
Location: NYC,USA

PostPosted: Tue Oct 06, 2020 10:44 pm
Reply with quote

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
View user's profile Send private message
sergeyken

Senior Member


Joined: 29 Apr 2008
Posts: 2012
Location: USA

PostPosted: Tue Oct 06, 2020 10:48 pm
Reply with quote

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
View user's profile Send private message
Joerg.Findeisen

Senior Member


Joined: 15 Aug 2015
Posts: 1231
Location: Bamberg, Germany

PostPosted: Tue Oct 06, 2020 11:07 pm
Reply with quote

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
View user's profile Send private message
Joerg.Findeisen

Senior Member


Joined: 15 Aug 2015
Posts: 1231
Location: Bamberg, Germany

PostPosted: Wed Oct 07, 2020 5:43 am
Reply with quote

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
View user's profile Send private message
sergeyken

Senior Member


Joined: 29 Apr 2008
Posts: 2012
Location: USA

PostPosted: Wed Oct 07, 2020 5:31 pm
Reply with quote

A strange “requirement” of TS was, to do this “in a single step”...
Remains unclear: the JCL step, or SORT step??
Back to top
View user's profile Send private message
sergeyken

Senior Member


Joined: 29 Apr 2008
Posts: 2012
Location: USA

PostPosted: Wed Oct 07, 2020 11:13 pm
Reply with quote

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
View user's profile Send private message
Joerg.Findeisen

Senior Member


Joined: 15 Aug 2015
Posts: 1231
Location: Bamberg, Germany

PostPosted: Wed Oct 07, 2020 11:57 pm
Reply with quote

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
View user's profile Send private message
Joerg.Findeisen

Senior Member


Joined: 15 Aug 2015
Posts: 1231
Location: Bamberg, Germany

PostPosted: Thu Oct 08, 2020 12:25 am
Reply with quote

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
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic View Bookmarks
All times are GMT + 6 Hours
Forum Index -> DFSORT/ICETOOL

 


Similar Topics
Topic Forum Replies
No new posts How to split large record length file... DFSORT/ICETOOL 10
No new posts INCLUDE OMIT COND for Multiple values... DFSORT/ICETOOL 5
No new posts Extracting Variable decimal numbers f... DFSORT/ICETOOL 17
No new posts To get the count of rows for every 1 ... DB2 3
No new posts SFTP Issue - destination file record ... All Other Mainframe Topics 2
Search our Forums:

Back to Top