3

我正在尝试将 MF PS 分成几个数据集。例如,如果我有一个包含 600 条记录的数据集,我想将它分成 6 个文件,每个文件有 100 条记录。是否可以使用 JCL 排序来做到这一点?

4

4 回答 4

4

下面的 JCL 使用 DFSORT 将 DD SOTRIN 均匀地拆分到 3 个输出数据集(OUT1、OUT2 和 OUT3)中,以在 6 个添加 3 个输出 DD 语句并将它们添加到 FNAMES 语句中执行此操作。

//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) 是您希望对 sortint 数据集进行排序的方式,以下是该字段语句的含义

21 待排序字段的开头
5 待排序字段的长度
FS Floating Sign (Signed Numeric)
A 升序

DFSORT 入门手册
Smart DFSORT Tricks有很多有用的示例和其他几种将记录从数据集中拆分出来的方法

于 2011-03-03T12:11:13.493 回答
2

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 数据集的记录建立文件。

于 2013-01-22T00:57:43.770 回答
1
  • Deuian 的 SORT CARD 将输入文件平均拆分为输出文件。例如,如果我们有3 个输出文件,则输入记录总数除以 3 将是每个输入文件的记录数
  • 在 cos 中,我们可以根据应该发生的拆分来指定计数,如下所示。它隐式地将输入文件拆分为每个输出文件 10000 条记录。例如,我们在输入文件中有 40000 条记录,我们将它们分成 3 个输出文件,那么我们将在输出文件中获得 10000+10000/3 条记录。

OUTFIL FNAMES=(OUT1,OUT2,OUT3),SPLIT= 10000

  • 简而言之,当我们对输出记录数没有任何限制时,我们可以使用它。当我们在拆分时有任何这样的标准时,下面的代码会有所帮助......

排序字段=复制
外部文件=OUT1,ENDREC=10000
外部文件=02,STARTREC=10001,ENDREC=20000 外部文件=03,STARTREC=20001,ENDREC=30000

  • 最后,如果我们在输入文件中有超过 30000 条记录,并且我们没有指定对这些记录做什么,那么 SORT 不会理会它们。这意味着最后一个输出文件将只保存 10000 条记录。

希望我让你清楚。如果有进一步的问题,一定要回来。

于 2011-04-30T11:04:01.507 回答
0

假设您不知道数据集中有多少条记录,但您希望在两个输出数据集之间尽可能平均地划分记录。您可以使用 OUTFIL 的 SPLIT 参数将第一条记录放入 OUTPUT1,将第二条记录放入 OUTPUT2,将第三条记录放入 OUTPUT1,将第四条记录放入 OUTPUT2,以此类推,直到记录用完为止。SPLIT 在 FNAMES 指定的数据集中一次一个地拆分记录。以下语句在两个 OUTFIL 数据集之间拆分记录: OPTION COPY OUTFIL FNAMES=(OUTPUT1,OUTPUT2),SPLIT 对于 17 条输入记录,为 OUTPUT1 生成的结果为: Record 01 Record 03 Record 05 Record 07 Record 09 Record 11 Record 13记录 15 记录 17

类似地,OUTFIL 的 SPLITBY=n 参数在 FNAMES 指定的数据集中一次拆分记录 n。以下语句在三个 OUTFIL 数据集之间一次拆分四个记录: OPTION COPY OUTFIL FNAMES=(OUT1,OUT2,OUT3),SPLITBY=4

于 2019-06-26T18:08:26.023 回答