Cobol Read语句格式。可以用不同的方式重做吗?

时间:2013-12-17 17:51:21

标签: cobol

在下面的阅读声明中,不能将其制作成以下形式?我认为这可能更容易理解和阅读。

基本上,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.             

2 个答案:

答案 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代码"内联"反正。