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

Cobol S9(9)如何解释左对齐的数值?,cobol,mainframe,Cobol,Mainframe,假设我有一个PS输入文件,其中包含9字节长的数据。输入数据将是必须左对齐的数字。因此,如果输入文件中的数字小于9字节,则该数字将以空格结尾。 当我将这样一个数字读入9(9)变量和DISPLAY值时,显示的值将是紧跟空格的数字(在假脱机中用SET HEX ON进行检查)。 但是,当我将9(9)变量中的值移动到S9(9)COMP变量中,然后显示其值时,显示的值将是一些随机数字值。 我这里的问题是,在上述场景中,COBOL如何解释/转换S9(9)COMP变量的值?这是一台计算机,您得到的结果远非随机的

假设我有一个PS输入文件,其中包含9字节长的数据。输入数据将是必须左对齐的数字。因此,如果输入文件中的数字小于9字节,则该数字将以空格结尾。
当我将这样一个数字读入
9(9)
变量和
DISPLAY
值时,显示的值将是紧跟空格的数字(在假脱机中用
SET HEX ON
进行检查)。
但是,当我
9(9)
变量中的值移动到
S9(9)COMP
变量中,然后
显示其值时,显示的值将是一些随机数字值。

我这里的问题是,在上述场景中,COBOL如何解释/转换
S9(9)COMP
变量的值?

这是一台计算机,您得到的结果远非随机的

你认为会发生什么

您正在将一些不是数字的但定义为数字的内容移动到二进制字段。您将拥有一个与数据相关的值,而不是您期望的值

您有编译器选项NUMPROC(NOPFD)。如果你有NUMPROC(PFD),你会有一个S0C7异常终止

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

在计算之前,或在您的情况下,转换为二进制之前,分区十进制是“压缩的”。这意味着所有的区域都被扔掉了,符号和最后的数字被颠倒了

所以,在压缩数中,你只得到数字和符号

只要所有的数字都是0-9,符号是A-F,就没有S0C7。混乱的结果,但没有S0C7

如果我们考虑最后两个尾随空间,<代码> x '4040' < /代码>。您拥有NUMPROC(NOPFD),因此编译器将为您“修复”符号(在本例中为

F
)。抛出区域(前4个区域)交换最后一个字节(变为
X'04'
),修复符号(变为
X'0F'
),并将该值转换为二进制(成功)。您已将空格变为零


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

如果您可以显示代码和用作输入的数据以及收到的输出,我们可以更具体。