2

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

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

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

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

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

4

5 回答 5

4

我更喜欢看到“将 0 移动到 WS-SEQ-NO”。依靠翻转可能无法在所有平台上按预期工作,而且还不是很清楚。

请记住,您为追随您的人编写源代码。他们应该看着它并清楚地看到“哦,重置计数器”。

于 2012-02-01T01:05:59.340 回答
3

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

需要记住的一点是,可能有一些编译选项会影响您观察到的截断/翻转行为。例如,在IBM 的 Enterprise COBOL中,如果 WS-SEQ-NO 定义为 PIC 9(4) COMP,那么编译选项TRUNC(BIN)将导致截断/翻转 65535,而 TRUNC(STD) 将表现出您的行为目前重新看到。

于 2012-02-01T03:15:31.267 回答
2

我一无所知,但我担心用于 WS-SEQ-NO 的数据类型可能与 COBOL 的不同实现不同,并且可能会更改大小,因此自动翻转将不再起作用。更重要的是,if 语句非常清楚地表明这是您的意图,而不仅仅是意外的副作用。

于 2012-02-01T00:28:25.753 回答
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级。

于 2012-02-01T14:24:22.590 回答
0

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

于 2012-02-08T22:10:46.387 回答