【问题标题】:Correct way to reset counter in COBOL [closed]在 COBOL 中重置计数器的正确方法 [关闭]
【发布时间】:2023-03-17 16:53:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: coding-style counter cobol code-standards


    【解决方案1】:

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

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

    【讨论】:

    • +1 表示“为人类编写源代码”。在我看来,这是使用“移动归零”方法的最有力论据。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      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】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-08-02
            • 2015-05-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-19
            • 2017-12-07
            • 1970-01-01
            相关资源
            最近更新 更多