有两个文件FILE1.DATA和FILE2.DATA 使用大型机中的DFSORT计算百分比(FILE1中的记录数/ FILE2中的记录数)* 100。如果超过阈值(90%),则设置返回代码。
//********Extracting Unique records data*****************
//SORTT000 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=SAMPLE.DATA1,DISP=SHR
//SORTOUT DD DSN=FILE1.DATA,
// SPACE=(2790,(5376,1075),RLSE),
// UNIT=TSTSF,
// DCB=(RECFM=FB,LRECL=05,BLKSIZE=0),
// DISP=(NEW,CATLG,DELETE)
//SYSIN DD *
SORT FIELDS=(10,5,CH,A)
OUTREC FIELDS=(1:10,5)
SUM FIELDS=NONE
/*
//************Getting count of records*****************
//STEP001 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//IN1 DD DISP=SHR,DSN=FILE1.DATA
//IN2 DD DISP=SHR,DSN=FILE2.DATA
//OUT1 DD DSN=FILE1.DATA.COUNT,
// SPACE=(2790,(5376,1075),RLSE),
// UNIT=TSTSF,
// DCB=(RECFM=FB,LRECL=06,BLKSIZE=0),
// DISP=(NEW,CATLG,DELETE)
//OUT2 DD DSN=FILE2.DATA.COUNT,
// SPACE=(2790,(5376,1075),RLSE),
// UNIT=TSTSF,
// DCB=(RECFM=FB,LRECL=06,BLKSIZE=0),
// DISP=(NEW,CATLG,DELETE)
//TOOLIN DD *
COUNT FROM(IN1) WRITE(OUT1) DIGITS(6)
COUNT FROM(IN2) WRITE(OUT2) DIGITS(6)
/*
//*******Calculating percentage and if above 90% setting RC 04*****
//STEP002 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=FILE2.DATA.COUNT,DISP=SHR
// DD DSN=FILE1.DATA.COUNT,DISP=SHR
//SORTOUT DD DSN=FILE.DATA.COUNT.OUT,
// SPACE=(2790,(5376,1075),RLSE),
// UNIT=TSTSF,
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=0),
// DISP=(NEW,CATLG,DELETE)
//SETRC DD SYSOUT=*
//SYSIN DD *
INREC IFTHEN=(WHEN=INIT,BUILD=(1,6,X,6X'00',SEQNUM,1,ZD,80:X)),
IFTHEN=(WHEN=(14,1,ZD,EQ,2),OVERLAY=(8:1,6))
SORT FIELDS=(7,1,CH,A),EQUALS
SUM FIELDS=(8,4,BI,12,2,BI)
OUTREC OVERLAY=(15:X,1,6,ZD,DIV,+2,M11,LENGTH=6,X,
(8,6,ZD,MUL,+100),DIV,1,6,ZD,MUL,+100,EDIT=(TTT.TT))
OUTFIL FNAMES=SETRC,NULLOFL=RC4,INCLUDE=(23,6,CH,GT,C'090.00')
OUTFIL BUILD=(05:C'TOTAL NUMBER RECRODS IN FILE2 : ',1,6,/,
05:C'TOTAL NUMBER RECRODS IN FILE1 : ',8,6,/,
05:C'PERCENTAGE : ',23,6,/,
80:X)
//*
(15:X,1,6,ZD,DIV,+2,M11,LENGTH=6,X, (8,6,ZD,MUL,+100),DIV,1,6,ZD,MUL,+100,EDIT=(TTT.TT))
,具体是什么意思?答案 0 :(得分:3)
你的第一个问题的答案只是你没有说出来 ICETOOL的COUNT运算符你想要输出数据多长时间,所以 它提出了自己的数字。
这来自DFSORT应用程序编程指南:
WRITE(countdd)指定计数数据集的ddname 由ICETOOL为此操作制作。必须是countdd DD语句 当下。 ICETOOL按如下方式设置计数数据集的属性:
v RECFM设置为FB。
v LRECL设置为以下之一:
- 如果指定了WIDTH(n),则LRECL设置为n。如果计算,请使用WIDTH(n) 记录长度和LRECL必须设置为特定值(对于 例如,80),或者如果你想确保计数记录的长度 不超过特定的最大值(例如,20个字节)。
- 如果未指定WIDTH(n),则将LRECL设置为计算的所需值 记录长度。如果您的LRECL不需要设置为特定的 值,您可以让ICETOOL确定并设置相应的LRECL 未指定WIDTH(n)的值。
和
位数(d)
指定输出记录中计数的d位数,覆盖输出记录 默认为15位数。 d可以是1到15.计数写为d 带前导零的十进制数字。 DIGITS只能指定 指定了WRITE(countdd)。
如果您知道您的计数需要少于15位数,则可以使用 通过指定DIGITS(d)来代替较少的位数(d)。对于 例如,如果指定了DIGITS(10),则使用10位数而不是15位。
如果您使用DIGITS(d)并且计数超过了位数 使用后,ICETOOL终止操作。你可以防止溢出 通过为DIGITS(d)指定适当更高的d值。对于 例如,如果DIGITS(5)导致溢出,您可以使用DIGITS(6) 代替。
和
WIDTH(n)的
指定您希望ICETOOL用于的记录长度和LRECL 计数数据集。 n可以是1到32760.WIDTH只能指定 如果指定了WRITE(countdd)。 ICETOOL总是计算记录 写入计数记录所需的长度,并按如下方式使用:
v如果指定了WIDTH(n)并且计算的记录长度较小 ICETOOL大于或等于n,将记录长度和LRECL设置为n。 ICETOOL用右边的记录填充右边的计数记录 长度。
v如果指定了WIDTH(n)并且计算的记录长度更长 比n,ICETOOL发出错误消息并终止操作。
v如果未指定WIDTH(n),ICETOOL将设置记录长度和 LRECL到计算的记录长度。
如果您的计数记录长度和LRECL必须设置为a,请使用WIDTH(n) 特殊值(例如,80),或者如果你想确保 计数记录长度不超过特定最大值(例如, 20个字节)。否则,您可以让ICETOOL计算并设置 通过不指定WIDTH(n)来适当记录长度和LRECL。
对于你的第二个问题,是的,它可以一步完成,并大大简化。
问题是,通过做其他事情可以进一步简化。究竟还有什么取决于你的实际任务,我们不知道,我们只知道你为自己的任务选择的解决方案。
例如,您想知道一个文件何时在另一个文件大小的10%范围内。一种方法是,如果不需要点对点精度,则与管理存储的技术人员交谈。告诉他们你想做什么,他们可能已经有了一些可以用来做的事情(在讨论这个时,请记住这些是技术上数据集,而不是文件)。
或者,某些东西之前已经读过或写过这些文件。如果这样做的最后一个程序还没有产生它读/写的数量(在我看来,标准的良好实践,也与程序协调)然后修改程序现在这样做。那里。魔法。你有自己的数量。
安排这些计数属于他们自己的数据集(最好是记录类型,标题/预告片,更标准的良好做法)。
采取两个计数的更大(期望)的一步,"解决"什么是00%(除了简单的减法,除了正确的数据之外什么都不需要),并生成一个SYMNAMES格式文件(固定长度的80字节记录),带有一个带有该值的常量的SORT符号。
使用NULLOUT或NULLOFL将INCLUDE / OMIT与第二个记录计数相比使用符号的第二步。
上述类型解决方案的优点是它们基本上只使用很少的资源。在大型机上,客户支付资源。您的客户在年底可能不会那么高兴,因为他们发现他们已经为阅读付费并且计算了" 7.3m记录,以便您可以设置RC。
好吧,也许7.3米不是那么大,但是,当你有"解决方案"时,下一个人将用100,000条记录来做,下一条有1,000,000条记录。全部设置RC。任何一次运行(即使有10,000个记录的例子)都将超过大型机"的成本。解决方案在未来15年内每天运行。
关于你的第三个问题:
OUTREC OVERLAY=(15:X,1,6,ZD,DIV,+2,M11,LENGTH=6,X,
(8,6,ZD,MUL,+100),DIV,1,6,ZD,MUL,+100,EDIT=(TTT.TT))
在INREC之后,在SORT / MERGE和SUM(如果存在)之后处理OUTREC。请注意,在JCL中指定这些顺序的物理顺序不会影响它们的处理顺序。
OVERLAY说"用这些数据操作更新当前记录中的信息(BUILD总是创建当前记录的新副本)。
15:"第15栏" (记录15)。
X插入一个空白。
1,6,ZD表示"信息,此刻,在开始位置1,长度为6,这是一个分区十进制格式"。
DIV是分开的。
+2是数字常量。
1,6,ZD,DIV,+ 2表示"从位置1开始取六位数字,然后除以2,得到一个'结果&#39 ;,将被放置在下一个可用位置(在您的情况下为16)。
M11是一个内置的编辑掩码。有关该掩码的详细信息,请在手册中查找,因为您将在当时发现其他有用的预定义掩码。用它来格式化结果。
LENGTH = 6将结果限制为六位数。
到目前为止,前六个位置的数字将除以2,从位置16开始处理(通过掩码)为六位数的无符号分区小数。
该陈述的其余内容相似。括号影响"优先级"正常方式的数字运算符(请参阅手册以熟悉优先规则)。
EDIT =(TTT.TT)是一个使用定义的编辑掩码,在这种情况下插入一个小数点,截断原来最左边的数字,并在必要时有重要的前导零。