S9(9)如何解释左对齐的数值?

时间:2014-04-03 07:17:20

标签: cobol mainframe

假设我有一个包含9字节长数据的PS输入文件。输入数据将是必须左对齐的数字。因此,如果输入文件中的数字小于9个字节,则数字将以空格尾随 当我将这样的数字读入9(9)变量并且DISPLAY时,显示的值将是后跟空格的数字(在假脱机中使用SET HEX ON进行检查)。
但是,当我MOVE9(9)变量中的值转换为S9(9) COMP变量,然后DISPLAY为其值时,显示的值将是一些随机数值。
我的问题是,在上面的场景中,COBOL如何解释/转换S9(9) COMP变量的值?

1 个答案:

答案 0 :(得分:2)

它是一台计算机,你得到的结果远非随意。

您认为会发生什么?

您正在向二进制字段移动非数字但已定义为数字的内容。您将获得与您的数据相关的值,而不是您期望的值。

您有编译器选项NUMPROC(NOPFD)。如果您有NUMPROC(PFD),您将获得S0C7异常终止,

您应该会发现所有尾随空格都被视为零,并使用NUMPROC(NOPFD)。

在计算之前的分区小数,或者在转换为二进制的情况下,是#34;打包"。这意味着所有区域都被抛弃,标志和最终数字相反。

因此,在打包号码中,您只能获得数字和符号。

只要所有数字都是0-9并且符号是A-F,则没有S0C7。结果乱码,但没有S0C7。

如果我们考虑你的最后两个尾随空格,X'4040'。您有NUMPROC(NOPFD),因此编译器将"修复"你的标志(在这种情况下为F)。抛出区域(所以前4个)交换最后一个字节(变为X'04'),修复符号(变为X'0F')并将该值转换为二进制(成功)。您已将空格变为零。

如果使用NUMPROC(PFD),则不会发生符号修复,转换为二进制(CVB)会产生S0C7异常终止。