我想知道重置计数器的更好方法是什么。 我有以下内容:
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功能。 谢谢!
答案 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)
如果有效,它就有效。但是,在工作存储和程序循环中为程序添加注释,表示您期望发生翻转,这是期望的结果。我们凡人不会知道,明年当我们对你的计划进行维护时,我们会追捕你。