//ddname DD DSN=dataset name,DISP=(start_status,normal_end,abend)
//CURRENT DD DSN=CURRENT.FILE(FIRST),DISP=OLD
//OUTDATED DD DSN=LAST.USE.FOR.FILE,DISP=(OLD,DELETE)
//MUSTUSE DD DSN=MUST.USE.BEFORE.DELETE,DISP=(OLD,DELETE,KEEP)
//ddname DD DSN=dataset name,DISP=(start_status,normal_end,abend),
// UNIT=unit,VOL=SER=volid
//NEWDATA DD DSN=SOMENAME.FIRST,DISP=OLD,
// UNIT=SYSDA,VOL=SER=WORK01
//OUTDATED DD DSN=LAST.USE.FOR.FILE,DISP=(OLD,DELETE,KEEP),
// UNIT=TAPE,VOL=SER=012345
//STILGOOD DD DSN=MORE.USE.COMING,DISP=(OLD,CATLG,KEEP),
// UNIT=DISK,VOL=SER=DISK01
//ddname DD DSN=dataset name,DISP=OLD
//NEWDATA DD DSN=OLDFILE.FIRST,DISP=OLD <-- previous contents replaced
//ddname DD DSN=dataset name,
// DISP=(NEW,CATLG,DELETE),
// UNIT=unit,
// SPACE=(units,(primary,secondary,directory_amt),RLSE,CONTIG),
// DCB=(RECFM=record_fmt,LRECL=record_length,BLKSIZE=blocking_factor)
//NEWFILE DD DSN=NEWFILE,DISP=(NEW,CATLG,DELETE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=4000),
// UNIT=SYSDA,SPACE=(TRK,(1,1)) <-- sequential
data set
//NEWPDS DD DSN=CSCJPH.CSC.CNTL2,DISP=(NEW,CATLG,DELETE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=4000),
// UNIT=SYSDA,SPACE=(TRK,(2,2,10)) <--
partitioned data set
SORT FIELDS=(START LOCATION, LENGTH, SEQUENCE,...),FORMAT=format
MERGE FIELDS=(START LOCATION, LENGTH, SEQUENCE,...),FORMAT=format
FORMAT 2
SORT FIELDS=(START LOCATION, LENGTH, FORMAT, SEQUENCE,...)
MERGE FIELDS=(START LOCATION, LENGTH, FORMAT, SEQUENCE,...)
START LOCATION - beginning position of the key. The first position on the record is 1.
LENGTH - length of the key.
FORMAT - CH - for data stored as characters
PIC XXX USAGE DISPLAY.
- ZD - for numbers stored as zoned decimal. PIC S999 USAGE DISPLAY.
- PD - for numbers stored as packed decimal PIC S999 USAGE COMP-3.
- BI - for numbers stored as binary PIC S999 USAGE COMP.
SEQUENCE - A for ascending (low to high)
- D for descending (high to low)
//SYSIN DD *
SORT FIELDS=(7,10,A,1,5,D),FORMAT=CH
//SYSIN DD *
SORT FIELDS=(3,6,CH,A,11,3,BI,D,18,3,ZD,A)
//SYSIN DD *
MERGE FIELDS=(12,10,CH,A,1,11,CH,A)
Ý
NOTE: Column 1 of the sort or merge control statement is always blank.
The steps are interdependent since the program in a step
frequently prepares data for a subsequent program.
//CCPT00A1 JOB 1,'BIN 13 -- PETLICKI',MSGCLASS=X,MSGLEVEL=(1,1)
//BR14 EXEC PGM=IEFBR14
//DD1 DD DSN=CCPH00.SORTED.FILE,DISP=(MOD,DELETE),
// UNIT=SYSDA,SPACE=(TRK,0)
<-- to be able to catalogue the dataset later
//*-------------------------------------------------------------
//GENSTEP EXEC PGM=IEBGENER
//SYSIN DD DUMMY
//SYSUT1 DD DSN=JPETLIC.SAMPDATA,DISP=SHR
//SYSUT2 DD DSN=CCPT00.TEMP1, < -- dataset, will
be used by SORTSTEP
// DISP=(NEW,CATLG,DELETE),
< -- so it can be found for the next STEP
// UNIT=SYSDA,SPACE=(TRK,5),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=4000)
//SYSPRINT DD SYSOUT=*
//*-------------------------------------------------------------
//SORTSTEP EXEC PGM=SORT
//SYSIN DD DSN=JPETLIC.CSC.CNTL(SORTSAMP),DISP=OLD
//SORTIN DD DSN= CCPT00.TEMP1, < -- input
from GENSTEP
// DISP=(OLD,DELETE,KEEP)
//SORTWK01 DD UNIT=DISK,SPACE=(TRK,1)
//SORTWK02 DD UNIT=DISK,SPACE=(TRK,1)
//SYSOUT DD SYSOUT=*
//SORTOUT DD DSN=CCPH00.SORTED.FILE,DISP=(NEW,CATLG,DELETE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=4000),
// UNIT=SYSDA,SPACE=(TRK,(1,1)) <-- sequential data set
//*---------------------------------------------------------------------------------------------------------------------------
SORT EXERCISE (VALUE 25 POINTS)
input is JPETLIC.CSC.CNTL(GRADES2)
sort by first grade in
ascending order, name in descending order
output to a sequential
file called CCP#nn.CSC.SORT2
input is CCP#nn.CSC.SORT1
and CCP#nn.CSC.SORT2
merge by first grade
in ascending order, name in descending order
output is a sequential
file CCP#nn.CSC.MERGED
The job should run successfully with every step having COND CODE
= 0000
and free of NOT CATLG 2 errors. Make sure MSGLEVEL=(1,1) and MSGCLASS
= X.