假设我有一个PS输入文件,其中包含9字节长的数据。输入数据将是必须左对齐的数字。因此,如果输入文件中的数字小于9个字节,则该数字将以空格结尾。
当我将这样一个数字读入9(9)变量并执行DISPLAY时,显示的值将是后面跟着空格的数字(用假脱机中的SET HEX ON检查)。
但是,当我将9(9)变量中的值MOVE到一个S9(9) COMP变量中,然后DISPLAY它的值时,显示的值将是某个随机数值。
我的问题是,在上面的场景中,COBOL如何解释/转换S9(9) COMP变量的值?
发布于 2014-04-03 16:16:33
这是一台电脑,你得到的结果远不是随机的。
你认为会发生什么?
你将一些不是数字的东西,但是你已经定义为数字的东西,MOVEing到一个二进制域。你将拥有一个与你的数据相关的值,只是不是你所期望的。
您有编译器选项NUMPROC(NOPFD)。如果你有NUMPROC(PFD),你会得到一个S0C7 abend,
您会发现所有的尾随空格都被视为零,使用NUMPROC(NOPFD)。
在计算之前,分区十进制,或者像您的例子中,转换为二进制,是“打包”的。这意味着所有的区域都被丢弃了,符号和最后的数字颠倒了。
所以,在打包的数字中,你只能得到数字和符号。
只要所有的数字都是0-9,符号是A-F,就没有S0C7。结果乱码,但没有S0C7。
如果我们考虑你最后两个尾随空格,X'4040'。您有NUMPROC(NOPFD),因此编译器将为您“修复”符号(在本例中为F )。抛出区域(前4个)交换最后一个字节(变为X'04'),修复符号(变为X'0F'),并将该值转换为二进制(这是成功的)。你已经把空格变成了零。
如果您使用NUMPROC(PFD),符号修复将不会发生,并且转换为二进制(CVB)将给您一个S0C7异常终止。
https://stackoverflow.com/questions/22830472
复制相似问题