SUM无效“字段格式无效或缺失”

时间:2015-07-13 08:14:07

标签: mainframe zos jcl dfsort

我有一个这种格式的输入文件:(长度20,10个字符和10个数字)

jname1    0000500006
bname1    0000100002
wname1    0000400007
yname1    0000000006
jname1    0000100001
mname1    0000500012
mname2    0000700013

在我的jcl中,我已经定义了我的sysin数据:

SYSIN    DATA  *              
 SORT FIELDS=(1,1,CH,A)
 SUM FIELDS=(11,10,FD)        
         DATAEND              
*   

只要我不添加和字段就可以正常工作所以我想知道我是否使用了错误的格式来查看我的数字,因为我知道它们从字段11开始并且长度为10格式是唯一可能出错的。

正如您可能已经意识到这个JCL的目的只是列出值但是按名称的第一个字母分组(因此对于我给出的示例数据和JCL,它会将mname1和mname2的数字组合在一起但保持其他记录不受影响。)

我对此有点新意,所以如果我的数字在输入文件中是这样的话,我很想知道格式需要什么。

2 个答案:

答案 0 :(得分:1)

如果是DFSORT的新用户,请获取您的DFSORT版本(http://www-01.ibm.com/support/docview.wss?uid=isg3T7000080)的 DFSORT入门指南。

这将通过许多示例完成所有基本操作。

DFSORT应用程序编程指南详细介绍了您需要了解的所有内容。再举几个例子。该文档的附录C包含所有可用的数据类型(注意,当您尝试使用FD时,FD不是有效的数据类型,因此可能是拼写错误)。整个文档中有表格列出了哪些数据类型可用,如果有特定限制。

有关高级技巧,请参阅此处的 DFSORT智能技巧出版物:http://www-01.ibm.com/support/docview.wss?uid=isg3T7000094

您还需要了解数据存储在大型机上的方式。

小数(可以是"压缩小数"或" zoned-decimal")不包含小数点。隐含小数点。在高级语言中,您告诉编译器小数点在哪里(在固定位置),编译器为您执行对齐。在汇编程序中,您自己完成所有事情。

十进制数是100%准确的,因为有机器指令直接作用于打包十进制数据,给出打包十进制结果。

实际包含小数点的字段,不能直接用于算术。

无符号字段在任何算术中使用时都被视为正数。

SUM语句支持有限数量的数字定义,您选择了正确的数字定义。您的数据未签名无关紧要。

如果SUM的输出格式不符合您的要求,请查看OPTION ZDPRINT(或NOZDPRINT)。

如果您想进一步格式化,可以使用OUTREC或OUTFIL。

作为使用SUM的选项,您可以使用OUTFIL报告功能(特别是,但不限于,如果您需要报告)。您可以将SECTIONSTRAILER3TOT/TOTAL一起使用。

要使用SUM(这不是报告功能的问题)需要注意的事项是,如果任何给定的一个(或多个)SUMmed字段超出字段大小。要继续使用SUM,如果发生这种情况,则需要在INREC中扩展该字段,然后使用SUM来使用新的,足够的大小。

答案 1 :(得分:0)

经过一些反复试验后,我终于找到了它,我需要使用的格式是ZD格式(分区十进制,签名),所以我的sysin就变成了这样:

SYSIN    DATA  *              
 SORT FIELDS=(1,1,CH,A)
 SUM FIELDS=(11,10,ZD)        
         DATAEND              
*   

即使我的记录不包含任何小数而且它们是未签名的,我也不会这样做,如果有人知道为什么会这样,请继续向我解释。

现在,我要记住它的方式是:Z =真实的符号(意思是整数,所以没有小数)