在COBOL中重置计数器的正确方法

时间:2012-02-01 00:08:53

标签: coding-style counter cobol code-standards

我想知道重置计数器的更好方法是什么。 我有以下内容:

03 WS-SEQ-NO    PIC  9(04).

当WS-SEQ-NO为9999时,我增加它,或者如果我将10000移入其中,它将被截断,并变为0000.这实际上是期望的结果,因为我希望它在之后勾选到0000 9999.但是,我很想知道这是否可以被COBOL编程标准所接受?或者我应该使用IF条件来重置它。 E.g:

IF WS-SEQ-NO = 9999
    MOVE 0 TO WS-SEQ-NO
ELSE
    ADD 1 TO WS-SEQ-NO
END-IF.

此外,这段代码每个月只执行一次,并且它不在循环中,所以我不急于避免有额外的IF条件。我只是想知道它是否“合法”,可以说,在编程标准意义上,依赖于这个截断数字而不是编码的COBOL功能。 谢谢!

5 个答案:

答案 0 :(得分:4)

我更喜欢看到“将0移至WS-SEQ-NO”。依赖于翻转可能无法在所有平台上按预期工作,而且根本不那么明确。

请记住,你为后来的人类编写了源代码。他们应该看一下并清楚地看到“哦,重置柜台”。

答案 1 :(得分:3)

我发现MOVE 0 TO WS-SEQ-NO方法更清楚你的意图。

要记住一些事情,可能存在影响您观察到的截断/翻转行为的编译选项。例如,在IBM's Enterprise COBOL中,如果WS-SEQ-NO定义为PIC 9(4)COMP,则编译选项TRUNC(BIN)将导致截断/翻转为65535,而TRUNC(STD)将显示你现在看到的行为。

答案 2 :(得分:2)

我什么都不知道COBOL,但我担心的是WS-SEQ-NO的数据类型可能与COBOL的不同实现有所不同,并且可能会改变大小以便自动翻转不再有效。更重要的是,if语句清楚地表明这是你想要的,而不仅仅是偶然的副作用。

答案 3 :(得分:2)

我会保持条件并以这种方式定义计数器

01 COUNTERS.
   03 WS-SEQ-NO    PIC  9(04).
      88 MAX-SEQ-NO VALUE 9999.
...
IF MAX-SEQ-NO
    MOVE 0 TO WS-SEQ-NO
ELSE
    ADD 1 TO WS-SEQ-NO
END-IF.

如果您需要将计数器修改为PIC 9(5),您将不会忘记修改条件,因为您不必这样做。

您只需要修改等级88。

答案 4 :(得分:0)

如果有效,它就有效。但是,在工作存储和程序循环中为程序添加注释,表示您期望发生翻转,这是期望的结果。我们凡人不会知道,明年当我们对你的计划进行维护时,我们会追捕你。