OUTFIL Reformatting
OUTFIL Reformatting Example
Scenario -
Create three output files like below -
- dept1 records to file1 and add 2 digit sequence number from 60th byte starting from 1 and increment by 2.
- dept2 records to file2 and add 2 digit sequence number from 60th byte starting from 2 and increment by 2.
- records other than dept1 to file3.
Input File - MATEPK.SORT.INPUT01 - FB file of 80 length
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8 00001 student1 dept1 560 00003 student3 dept2 520 00004 student4 dept1 540 00005 student5 dept2 500 00002 student2 dept3 510 00006 student6 dept3 550 00008 student8 dept1 530 00007 student7 dept3 510 00009 student9 dept2 520 00010 student10 dept2 505
JCL -
----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
//MATEPKD JOB (123),'MTH',NOTIFY=&SYSUID
//*
//STEP01 EXEC PGM=SORT
//SORTIN DD DSN=MATEPK.SORT.INPUT01,DISP=SHR
//OUTPUT1 DD DSN=MATEPK.SORT.OUTPT01,
// SPACE=(CYL,(1,1),RLSE),DCB=*.SORTIN,
// DISP=(NEW,CATLG,DELETE)
//OUTPUT2 DD DSN=MATEPK.SORT.OUTPT02,
// SPACE=(CYL,(1,1),RLSE),DCB=*.SORTIN,
// DISP=(NEW,CATLG,DELETE)
//OUTPUT3 DD DSN=MATEPK.SORT.OUTPT03,
// SPACE=(CYL,(1,1),RLSE),DCB=*.SORTIN,
// DISP=(NEW,CATLG,DELETE)
//SYSOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=(1,5,ZD,A)
OUTFIL FNAMES=OUTPUT1,INCLUDE=(30,5,CH,EQ,C'dept1'),
OUTREC OVERLAY=(60:SEQNUM,2,ZD,START=1,INCR=2)
OUTFIL FNAMES=OUTPUT2,INCLUDE=(30,5,CH,EQ,C'dept2'),
OUTREC OVERLAY=(60:SEQNUM,2,ZD,START=2,INCR=2)
OUTFIL FNAMES=OUTPUT3,OMIT=(30,5,CH,EQ,C'dept1')
/*
Output File: MATEPK.SORT.OUTPT01 - FB file of 80 length
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8 00001 student1 dept1 560 01 00004 student4 dept1 540 03 00008 student8 dept1 530 05
File: MATEPK.SORT.OUTPT02 - FB file of 80 length
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8 00003 student3 dept2 520 02 00005 student5 dept2 500 04 00009 student9 dept2 520 06 00010 student10 dept2 505 08
File: MATEPK.SORT.OUTPT03 - FB file of 80 length
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8 00002 student2 dept3 510 00003 student3 dept2 520 00005 student5 dept2 500 00006 student6 dept3 550 00007 student7 dept3 510 00009 student9 dept2 520 00010 student10 dept2 505
Explaining Solution:
- SORT FIELDS=(1,5,ZD,A) - sort all outputs in ascending order based on the ZD value from 1 to 5 positions.
- OUTFIL FNAMES=OUTPUT1,INCLUDE=(30,5,CH,EQ,C'dept1') - All the records marching with "dept1" from the 30th position of length 5 will be copied to output1 file.
- OUTFIL FNAMES=OUTPUT1,..,OUTREC OVERLAY=(60:SEQNUM,2,ZD,START=1,INCR=2) - generates the sequence number in OUTPUT1 file starts with 1 and increments by 2 every time from 60th byte of length two.
- OUTFIL FNAMES=OUTPUT2,INCLUDE=(30,5,CH,EQ,C'dept2') - All the records marching with "dept2" from the 30th position of length 5 will be copied to output2 file.
- OUTFIL FNAMES=OUTPUT2,..,OUTREC OVERLAY=(60:SEQNUM,2,ZD,START=2,INCR=2) - generates the sequence number in OUTPUT2 file starts with 2 and increments by 2 every time from 60th byte of length two.
- OUTFIL FNAMES=OUTPUT3,OMIT=(30,5,CH,EQ,C'dept1') - All the records marching with "dept1" from the 30th position of length 5 will be ignore and remaining all the records will be copied to output3 file.