首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >COBOL中重置计数器的正确方法

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

Stack Overflow用户
提问于 2012-02-01 08:08:53
回答 5查看 2.7K关注 0票数 2

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

代码语言:javascript
复制
03 WS-SEQ-NO    PIC  9(04).

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

代码语言:javascript
复制
IF WS-SEQ-NO = 9999
    MOVE 0 TO WS-SEQ-NO
ELSE
    ADD 1 TO WS-SEQ-NO
END-IF.

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-02-01 22:24:23

我会保留条件并这样定义计数器。

代码语言:javascript
复制
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级。

票数 2
EN

Stack Overflow用户

发布于 2012-02-01 09:05:59

我更喜欢看到“将0迁移到WS-SEQ-NO”。依赖于翻转可能并不是在所有平台上都能像预期的那样工作,而且也不是很清楚。

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

票数 4
EN

Stack Overflow用户

发布于 2012-02-01 11:15:31

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9088964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档