在下面的阅读声明中,不能将其制作成以下形式?我认为这可能更容易理解和阅读。
基本上,read语句只是读取文件并决定应该执行哪个段落执行。可能很难看出该程序的功能,但我真正感兴趣的是,如果您可以将读取更改为下面列出的其他格式。
阅读数据文件 在结束 ......做一些代码 不在最后 ...做下面的代码 END-READ。
类别:
INIT-READ.
READ C AT END
GO TO EOJ.
IF C-ID = ' ' AND C-S = 'P'
GO TO I-R
END-IF.
IF CID = ' ' AND C-S = 'D'
IF F = 'Y'
MOVE 'N' TO F
MOVE 'your text here' TO RPT-ID
MOVE A TO H6
MOVE B TO H7
PERFORM PA THRU H-A-X
END-IF
PERFORM WD-CLAIM THRU W-X
GO TO I-R
END-IF.
PERFORM N-V THRU N-V-X.
答案 0 :(得分:1)
在讨论主题的底部,在GNU Cobol常见问题中捕获,http://opencobol.add1tocobol.com/gnucobol/#performing-forever Roger虽然提到了一个非常好的READ控件,但没有段落。
我在之前的帖子中看到过的一件事 新闻组cobol
什么是需要/理由 空内联执行组。
即。 PERFORM ... END-PERFORM
然后没有一个讨论意识到这一点 有一个 - 退出表演[CYCLE]
因此,这是一种方法 在没有段落的情况下定义退出条件。
即。 (非常简单)
PERFORM
READ xxx
AT END
EXIT PERFORM
END-READ
MOVE something TO somewhere
END-PERFORM
.. test xxx status and somewhere
当然还有其他变化。 基本上,这意味着你没有代码 使用部分/段落。 (推荐,如果仅从性能的角度来看)
请注意,CYCLE选项提供了有趣的可能性。
罗杰
答案 1 :(得分:1)
看看这里。 COBOL read/store in table。一种避免GO TO,甚至AT END / NOT AT END的方法。也不需要END-READ。
要避免AT END / NOT AT END,只需使用您应该已经使用的文件状态来检查所有IO操作是否成功。对于输入文件,当检测到文件结束时,READ将提供10的文件状态。
在文件状态上使用88。所以你可以说像付款结束 - 交易。
然后,要处理您的文件,请使用" priming read"。这是循环外的读取。
priming read
processing-loop until END-OF-PAYMENTS-TRANSACTIONS
do the processing
read
EXIT PERFORM(和其他一些EXIT选项)目前在所有COBOL中都不可用。请注意,如果您是大型团队的一员并在程序中放置了EXIT PERFORM,您可能会在几年内在同一代码块中找到几个EXIT PERFORM。所以他们可能一直都是GO TO。新的EXIT选项只是让GO TO拼写不同的一种方式。好吧,有点舌头,但我们走了。
当然,启动读取和读取上面两个PERFORM单个段落进行实际读取并检查io的有效性(文件状态为零或10表示正常,否则出现问题)。
小心考虑避免PERFORM段落/部分用于"性能"。除非性能至关重要,否则请写清楚。使用IBM的企业COBOL,使用OPT,可以使用PERFORM代码"内联"反正。