我正在尝试将MF PS分成多个数据集。 例如,如果我有包含600条记录的数据集,我想将其分成6个每个100条记录的文件。是否可以使用JCL排序来实现这一点?
//SPLIT EXEC PGM=ICEMAN
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=Y897797.INPUT1,DISP=OLD
//OUT1 DD DSN=Y897797.SPLIT1,DISP=(NEW,CATLG),
// SPACE=(CYL,(5,5)),UNIT=SYSDA
//OUT2 DD DSN=Y897797.SPLIT2,DISP=(NEW,CATLG),
// SPACE=(CYL,(5,5)),UNIT=SYSDA
//OUT3 DD DSN=Y897797.SPLIT3,DISP=(NEW,CATLG),
// SPACE=(CYL,(5,5)),UNIT=SYSDA
//SYSIN DD *
SORT FIELDS=(21,5,FS,A)
OUTFIL FNAMES=(OUT1,OUT2,OUT3),SPLIT
/*
SORT FIELDS=(21,5,FS,A)是指您想要排序数据集的方式,以下是这个字段语句的含义:
21:要排序的字段的起始位置
5:要排序的字段长度
FS:浮点符号(有符号数值)
A:升序排列
DFSORT入门手册
Smart DFSORT技巧中有许多有用的示例和其他几种将记录拆分出数据集的方法。
SPLIT仅仅是SPLIT,不能与数字联系在一起。
SPLITBY=n将在每个指定的OUTFIL数据集之间“轮换”n条记录。SPLIT与SPLITBY=1相同。
SPLIT1R=n仅会执行一次“轮换”(将n条记录写入第一个OUTFIL数据集,然后将n条记录写入第二个OUTFIL,以此类推,直到使用最终的OUTFIL数据集,其中包含输入中剩余的所有记录,无论有多少条。
OUTFIL FILES=OUT1不允许使用。应该使用OUTFIL FNAMES=(OUT1,OUT2,OUT3),SPLIT。
如果使用STATREC/ENDREC或INCLUDE/OMIT,则可以使用OUTFIL SAVE来建立一个文件,用于存储未写入任何其他OUTFIL数据集的记录。