分裂功能意味着什么

时间:2015-10-09 11:36:09

标签: cobol

DIVIDE  WS-ENT-CNYR-RED BY 4 GIVING WS-DT-CNYR 
  REMAINDER WS-YR-REMAINDER ON SIZE ERROR.

这是什么意思?

1 个答案:

答案 0 :(得分:8)

DIVIDE是一个COBOL动词,允许你进行除法,就像在数学中一样。

本手册和其他数学动词将在您的手册和课程笔记中介绍。

你显示的实际DIVIDE在语法上是不正确的:你应该有一个"命令性陈述"在ON SIZE ERROR短语之后。没有合理的COBOL编译器会允许该语句编译。

DIVIDE在做什么?这可能是闰年检查的开始。如果一年可以被4整除,则它是一个闰年候选者(除非可以被400整除,否则它也不能被100整除)。

除法的结果放在GIVING之后的数据名称中,剩下的是"剩下的"来自分区的地址位于REMAINDER之后的数据名称中。

通常在使用REMAINDER时,它将与整数划分,这对于成为一年是有意义的。 2015年除以4得到503,其余为3。不是闰年。

在这种情况下,ON SIZE ERROR应该是多余的。它除以文字(4),除非结果字段不足以包含结果,否则永远不会出现SIZE ERROR。

数据定义应该是:

ll  WS-ENT-CNYR-RED                  PIC 9(4).
ll  WS-DT-CNYR                       PIC 9(3). 
ll  WS-YR-REMAINDER                  PIC 9.

除非年度价值非常大,否则WS-DT-CNYR需要为9(4)。 ll是一个级别号,它将在01-49(或1-49)或77之间。

WS-YR-REMAINDER上应出现88级条件名称,如:

88  could-be-leap-year               VALUE ZERO.

在COBOL中看到GIVING很常见。如果未使用GIVING,则结果存储在语句中提到的其中一个字段中(您应该检查DIVIDE,MULTIPLYADDSUBTRACT)。

REMAINDER你只能看到"模数"需要一个部门。

除非指定了ROUNDED短语,否则不会对结果进行舍入,并且使用REMAINDER进行舍入没有多大意义。

在此示例中,只有WS-ENT-CNYR-RED 必须为数字项。 WS-DT-CNYR和WS-YR-REMAINDER都可以是数字编辑的项目。格式化报告行时,GIVING上的项目通常会进行数字编辑。在这个开始闰年检查的典型代码中,很可能所有都是数字的,并且所有都是整数。

根据三个项目的使用量以及它们的使用方式,可以将它们定义为PACKED-DECIMAL(或者任何COMPUTATIONAL-?项目为该编译器的压缩十进制数)或甚至二进制。

这是必要这是闰年检查的开始。除以4可能还有其他原因需要知道余数。

请注意,DIVIDE ... INTO ...也有效。实际上,1985年COBOL标准(以及之前的标准)中记录了DIVIDE语句的五种不同格式,您应该在手册中看到这些格式。

ON SIZE ERROR告诉编译器在出现" size error"发生。 A"尺寸错误"是指结果不适合为其提供的字段。

  ON SIZE ERROR 
      imperative-statement.

  ON SIZE ERROR 
      imperative-statement.
END-... (scope-delimiter, consists of END- prefix and verb used, in this case `END-DIVIDE`).

命令式语句可以是多个语句,但通常是一个(将结果字段设置为默认值,通常为零)。因为它可以是多个语句,所以终止语句非常重要,否则你会将意外的代码作为命令式语句的一部分。

许多人认为ON SIZE ERROR仅针对"除以零",但事实并非如此。如果由于字段的大小而导致结果不适合字段,则大小错误"已经发生了。

我没有使用ON SIZE ERROR。我确保非零除数,并且所有结果字段都足够大以包含预期结果。

因为我没有使用ON SIZE ERROR,所以我不知道REMAINDER是否也会导致尺寸错误。我会检查: - )

好的,我已经查过了。这是IBM的企业COBOL,除了Extensions之外,它是1985标准。如果REMAINDER字段太小而无法容纳余数,则将对 进行操作。所以要非常小心余数字段的大小,因为无法知道哪个字段导致了大小错误。

记录如下:

  

SIZE ERROR短语对于格式1,2和3,请参阅“SIZE ERROR短语”   第296页。   对于格式4和5,如果出现大小错误   商,没有余数计算是有意义的。因此,   商字段(标识符-3)和余数字段的内容   (标识符-4)不变。如果剩余部分出现大小错误,   余数字段(标识符-4)的内容不变。在   无论是哪种情况,您都必须分析结果以确定哪些   情况确实已经发生。

格式4和5使用REMAINDER。

如果您没有指定ON SIZE ERROR,那么行为将归结为单个编译器和运行时选项。企业COBOL将截断字段,但只有在进入运行时(语言环境)后才能检查是否还有其他事情要发生。相对于指定ON SIZE ERROR,这将花费大量时间。

因此,请确保您的字段大小正确。如果您不想这样做,请使用ON SIZE ERROR。如果在REMAINDER中使用ON SIZE ERROR,你必须自己确定在做任何事情之前导致SIZE ERROR的原因。

ON SIZE ERROR有一个对应物,而不是大小错误。它的使用类似于ON SIZE ERROR,除了有明显的区别。 ON SIZE ERROR和NOT ON SIZE ERROR可以同时使用:

DIVIDE WS-ENT-CNYR-RED       BY 4 
  GIVING                     WS-DT-CNYR 
  REMAINDER                  WS-YR-REMAINDER 
    ON SIZE ERROR
        imperative-statement-1
    NOT ON SIZE ERROR
        imperative-statement-2
END-DIVIDE (or .)