How to split a file in to equal parts without knowing the number of records in the input file?
Suppose you don't know how many records are in a dataset, but you want to divide the records as equal as possible among the output datasets. We can split a file into equal number parts by using ICETOOL with a small keyword SPLIT / SPLITBY. The all output files will have same number of records. The below code split the file into three equal parts.
Code: JCL
//SPLIT JOB TEST,'SPLIT',
// MSGCLASS=X,MSGLEVEL=(1,1),
// CLASS=B,TIME=1440,NOTIFY=&SYSUID
//JOBLIB DD DISP=SHR,DSN=SYS3.MVSV5.RUNTIME
//PSTY0010 EXEC PGM=ICETOOL,
// PARM='RC16=ABE',
// COND=(0,LT)
//INFILE DD DSN=< INPUT FILE >,
// DISP=(SHR,KEEP,KEEP)
//OUTFILE1 DD DSN=< OUTPUT FILE -1 >,
// DISP=(NEW,CATLG,CATLG),
// DATACLAS=
// DCB=
//OUTFILE2 DD DSN=< OUTPUT FILE -2 >,
// DISP=(NEW,CATLG,CATLG),
// DATACLAS=
// DCB=
//OUTFILE3 DD DSN=< OUTPUT FILE -3 >,
// DISP=(NEW,CATLG,CATLG),
// DATACLAS=
// DCB=
//TOOLIN DD *
COPY FROM(INFILE) TO(OUTFILE1,OUTFILE2,OUTFILE3) USING(CTL1)
//CTL1CNTL DD *
OPTION COPY
OUTFIL FNAMES=(OUTFILE1,OUTFILE2,OUTFILE3),SPLIT
//DFSMSG DD SYSOUT=*
//TOOLMSG DD SYSOUT=*