OUTFIL: Saving discards
OUTFIL: Saving discards
Summary
- OUTFIL used to save the discards by using SAVE parameter.
- The discards are the records which are discarded by the group of OUTFIL statements.
- The SAVE parameter selects the records for its OUTFIL dataset that not selected for any OUTFIL.
Syntax -
SORT FILEDS=(Starting position, length, data-format, A/D)
OUTFIL FNAMES=DDNAME1, INCLUDE/OMIT COND=(….)
OUTFIL FNAMES=DDNAME2, INCLUDE/OMIT COND=(….)
…..
OUTFIL FNAMES=DDNAMEn, SAVE
DDNAMEn | DDNAME is eight character’s name that representing the actual dataset in JCL. |
INCLUDE/OMIT | Specifies the INCLUDE/OMIT condition for specific OUTFIL |
SAVE | Specifies the records not selected for any OUTFIL will be saved to DDNAMEn |
Example -
Scenario - Create three output files with dept1 records to file1 and records which are not belongs to dept3 to file2 and the remaining records which are not satisfied above two conditions to file3.
Input File - MTHUSER.SORT.INPUT01 - FB file of 80 length
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
********************************* Top of Data **********************************
00001 student1 dept1 560
00003 student3 dept2 520
00004 student4 dept1 540
00005 student5 dept2 500
00002 student2 dept3 510
******************************** Bottom of Data ********************************
JCL -
----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
***************************** Top of Data ******************************
//Job-card
//*
//**********************************************************************
//*
//STEP01 EXEC PGM=SORT
//SORTIN DD DSN=MTHUSER.SORT.INPUT01,DISP=SHR
//OUTPUT1 DD DSN=MTHUSER.SORT.OUTPT01,
// SPACE=(CYL,(1,1),RLSE),DCB=*.SORTIN,
// DISP=(NEW,CATLG,DELETE)
//OUTPUT2 DD DSN=MTHUSER.SORT.OUTPT02,
// SPACE=(CYL,(1,1),RLSE),DCB=*.SORTIN,
// DISP=(NEW,CATLG,DELETE)
//OUTPUT3 DD DSN=MTHUSER.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')
OUTFIL FNAMES=OUTPUT2,OMIT=(30,5,CH,EQ,C'dept3')
OUTFIL FNAMES=OUTPUT3,SAVE
/*
**************************** Bottom of Data ****************************
Output File1 - MTHUSER.SORT.OUTPT01 - FB file of 80 length
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
********************************* Top of Data **********************************
00001 student1 dept1 560
00004 student4 dept1 540
******************************** Bottom of Data ********************************
Output File2 - MTHUSER.SORT.OUTPT02 - FB file of 80 length
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
********************************* Top of Data **********************************
00001 student1 dept1 560
00003 student3 dept2 520
00004 student4 dept1 540
00005 student5 dept2 500
******************************** Bottom of Data ********************************
Output File3 - MTHUSER.SORT.OUTPT03 - FB file of 80 length
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
********************************* Top of Data **********************************
00002 student2 dept3 510
******************************** Bottom of Data ********************************
Explaining Example -
- 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=OUTPUT2,OMIT=(30,5,CH,EQ,C'dept3') ) - All the records marching with "dept3" from the 30th position of length 5 will be ignored and remaining all records will be copied to output2 file.
- OUTFIL FNAMES=OUTPUT3,SAVE - All the records which are ignored from the above two filters will be copied to output3 file. i.e. All dept3 records will be copied to output3 file.