Skolusu
Senior Member
Joined: 07 Dec 2007 Posts: 2205 Location: San Jose
|
|
|
|
arvind.m,
If your input is already sorted on the key, then the following 1 pass solution will give you the desired results.
Code: |
//STEP0100 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD *
AAAAAAAAAAAAAAAAAAAAAA20090501Y
BBBBBBBBBBBBBBBBBBBBBB20090502Y
BBBBBBBBBBBBBBBBBBBBBB20090503Y
CCCCCCCCCCCCCCCCCCCCCC20090504Y
CCCCCCCCCCCCCCCCCCCCCC20090505Y
CCCCCCCCCCCCCCCCCCCCCC20090506Y
DDDDDDDDDDDDDDDDDDDDDD20090507Y
DDDDDDDDDDDDDDDDDDDDDD20090508Y
DDDDDDDDDDDDDDDDDDDDDD20090509Y
DDDDDDDDDDDDDDDDDDDDDD20090510Y
//OUT1 DD SYSOUT=*
//OUT2 DD SYSOUT=*
//OUT3 DD SYSOUT=*
//OUT4 DD SYSOUT=*
//SYSIN DD *
INREC IFTHEN=(WHEN=INIT,
BUILD=(1,31,27Z,SEQNUM,1,ZD,RESTART=(1,22),C'1')),
IFTHEN=(WHEN=(59,1,ZD,EQ,2),OVERLAY=(32:23,9,23:09Z)),
IFTHEN=(WHEN=(59,1,ZD,EQ,3),OVERLAY=(41:23,9,23:18Z)),
IFTHEN=(WHEN=(59,1,ZD,EQ,4),OVERLAY=(50:23,9,23:27Z))
SORT FIELDS=(1,22,CH,A),EQUALS
SUM FIELDS=(23,8,BI,31,8,BI,39,8,BI,47,8,BI,55,4,BI,60,1,ZD)
OUTFIL FNAMES=OUT1,INCLUDE=(60,1,ZD,EQ,1),BUILD=(1,31)
OUTFIL FNAMES=OUT2,INCLUDE=(60,1,ZD,EQ,2),BUILD=(1,31,/,1,22,32,9)
OUTFIL FNAMES=OUT3,INCLUDE=(60,1,ZD,EQ,3),
BUILD=(1,31,/,1,22,32,9,/,1,22,41,9)
OUTFIL FNAMES=OUT4,INCLUDE=(60,1,ZD,EQ,4),
BUILD=(1,31,/,1,22,32,9,/,1,22,41,9,/,1,22,50,9)
/*
|
If your input is not sorted on the key use this 2 pass DFSORT/ICETOOL JCL which will give you the desired results.
Code: |
//STEP0100 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN DD *
AAAAAAAAAAAAAAAAAAAAAA20090501Y
BBBBBBBBBBBBBBBBBBBBBB20090502Y
BBBBBBBBBBBBBBBBBBBBBB20090503Y
CCCCCCCCCCCCCCCCCCCCCC20090504Y
CCCCCCCCCCCCCCCCCCCCCC20090505Y
CCCCCCCCCCCCCCCCCCCCCC20090506Y
DDDDDDDDDDDDDDDDDDDDDD20090507Y
DDDDDDDDDDDDDDDDDDDDDD20090508Y
DDDDDDDDDDDDDDDDDDDDDD20090509Y
DDDDDDDDDDDDDDDDDDDDDD20090510Y
//T1 DD DSN=&&T1,DISP=(,PASS),SPACE=(CYL,(1,1),RLSE)
//OUT1 DD SYSOUT=*
//OUT2 DD SYSOUT=*
//OUT3 DD SYSOUT=*
//OUT4 DD SYSOUT=*
//OUT5 DD SYSOUT=*
//TOOLIN DD *
SORT FROM(IN) USING(CTL1)
SORT FROM(T1) USING(CTL2)
//CTL1CNTL DD *
SORT FIELDS=(1,22,CH,A)
OUTFIL FNAMES=T1,REMOVECC,BUILD=(1,31,2X),
SECTIONS=(1,22,
TRAILER3=(1,22,32:COUNT=(M11,LENGTH=1),'T'))
//CTL2CNTL DD *
SORT FIELDS=(1,22,CH,A,32,1,CH,D),EQUALS
OUTREC IFTHEN=(WHEN=GROUP,BEGIN=(32,1,ZD,GT,0),PUSH=(32:32,1))
OUTFIL FNAMES=OUT1,BUILD=(1,31),INCLUDE=(32,2,CH,EQ,C'1 ')
OUTFIL FNAMES=OUT2,BUILD=(1,31),INCLUDE=(32,2,CH,EQ,C'2 ')
OUTFIL FNAMES=OUT3,BUILD=(1,31),INCLUDE=(32,2,CH,EQ,C'3 ')
OUTFIL FNAMES=OUT4,BUILD=(1,31),INCLUDE=(32,2,CH,EQ,C'4 ')
/*
|
|
|