2011-03-03 59 views
3

我想将MF PS分成几个数据集。 例如如果我有一个包含600个rec的数据集,我想把它分成6个文件,每个文件有100个记录。有没有可能使用JCL排序来做到这一点?jcl排序除大型机数据集

回答

4

下面的JCL使用DFSORT将DD SOTRIN平均分配到3个输出DATASETS(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 
/* 

排序字段=(21,5,FS,A)是你想怎么排序sortint数据集,下面就是这个字段声明意味着

21月初场进行排序
5长度场进行排序
FS浮动注册(签名数值)
甲升序

DFSORT Getting Started Manual
Smart DFSORT Tricks拥有大量ö ˚F有用的例子和几个其他的方式来记录拆分出来的数据集

+0

我试图运行这个工作,它将记录分成3个文件,但在这种情况下,1第一个文件写入st rec,第二个文件写入第二个文件,依此类推。你能否解释一下SORT FIELDS =(21,5,FS,A)的意义?我试图打开您提供的链接。但该链接中的PDF不能打开......你能帮忙吗? – Saisha 2011-03-04 08:58:17

+0

我已经添加了FIELDS语句表示的内容。你想要什么方式记录分裂? – Deuian 2011-03-07 14:44:25

+0

我的输入文件已经排序,我只是想分几个文件。我使用了选项SORT FIELDS = COPY,它对我来说工作得很好。非常感谢您的解决方案。它节省了我使用SKIPREC和STOPAFTER的时间...... :)非常感谢:) – Saisha 2011-03-10 07:26:40

1
  • Deuian的排序卡将输入文件到输出文件同样的。如果我们有3输出文件例如总输入记录除以3将是每个输入文件的记录计数
  • 对于cos,我们可以指定基于应该发生分割的计数,如下所示。它隐式地将输入文件分割成输出文件10000个记录。例如,我们在输入文件中有40000条记录,我们将它们分成3个输出文件,然后我们将在输出文件中获得10000 + 10000/3条记录。

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

  • 在简单地说,我们可以利用它,当我们没有任何约束输出记录计数。当我们有任何这样的标准,而拆分然后在下面的代码可以帮助...

排序字段=拷贝
OUTFIL FILES = OUT1,ENDREC = 10000
OUTFIL FILES = 02,STARTREC = 10001 ,ENDREC = 20000 OUTFIL FILES = 03,STARTREC = 20001,ENDREC = 30000

  • 最后,如果我们有超过30000条记录中输入文件,我们没有指定哪些d o对于那些记录,所以SORT不会为他们打扰。最后一个输出文件仅包含10000条记录。

希望我已经说清楚了。请进一步回答问题。

2

SPLIT只是SPLIT,你不能将它与一个数字相关联。

SPLITBY = n将在指定的每个OUTFIL数据集之间“旋转”n个记录。 SPLIT与SPLITYBY = 1相同。

SPLIT1R = n只会执行一次“旋转”(n条记录将写入第一个OUTFIL数据集,然后n写入第二个OUTFIL并继续如此,直到使用最终的OUTFIL数据集,这将包含任何剩余的记录输入,无论有多少。

OUTFIL FILES = OUT1不permissable。

如果使用STATREC/ENDREC或包含/ OMIT,OUTFIL SAVE可以用来建立未写入记录文件任何其他的OUTFIL数据集