【问题标题】:Is it possible to pass a COBOL File Descriptor to another program是否可以将 COBOL 文件描述符传递给另一个程序
【发布时间】:2021-06-09 18:48:58
【问题描述】:

我可以将主 COBOL 代码中的文件控制 FD 条目传递到过程中吗?

如果是,从 COBOL 主程序调用过程时我需要传递什么?

【问题讨论】:

    标签: cobol mainframe zos jcl


    【解决方案1】:

    FD 中使用EXTERNAL 关键字,允许运行单元内的多个程序访问同一个文件。运行时不是“传递”FD,而是将单独的程序指向相同的FD

    SELECTFD 必须描述同一个文件。

    在下面,pgm-main 打开和关闭文件,pgm-1 写入文件,pgm-2 读取文件。

       program-id. pgm-main.
       environment division.
       input-output section.
       file-control.
           select f assign "f.dat"
               organization sequential
           .
       data division.
       file section.
       fd f external.
       1 f-rec pic 99.
       procedure division.
           open output f
           call "pgm-1"
           close f
           open input f
           call "pgm-2"
           close f
           goback
           .
       end program pgm-main.
    
       program-id. pgm-1.
       environment division.
       input-output section.
       file-control.
           select f assign "f.dat"
               organization sequential
           .
       data division.
       file section.
       fd f external.
       1 f-rec pic 99.
       working-storage section.
       1 x comp pic 99.
       procedure division.
           perform varying x from 1 by 1
           until x > 5
               move x to f-rec
               write f-rec
           end-perform
           goback
           .
       end program pgm-1.
    
       program-id. pgm-2.
       environment division.
       input-output section.
       file-control.
           select f assign "f.dat"
               organization sequential
           .
       data division.
       file section.
       fd f external.
       1 f-rec pic 99.
       working-storage section.
       1 pic x value "0".
         88 eof value "1".
       procedure division.
           perform until eof
               read f
               end
                   set eof to true
               not end
                   display f-rec
               end-read
           end-perform
           goback
           .
       end program pgm-2.
    

    输出:

    01
    02
    03
    04
    05
    

    【讨论】:

      【解决方案2】:

      这是一种替代方法,而不是直接回答问题。它是 Cobol 程序员可能会遇到并且应该知道的一种方法。 我添加的目的是为了提供信息。


      传递文件控制的另一种方法是使用File-DriverFile-Interface 模块来读取/写入文件。单独的应用程序调用这个程序,如果一个文件在多个地方使用,这种方法效果最好。

      File-Driver 的优点包括

      • 您可以使链接中的文件记录区域远大于文件记录大小。 该文件可能有一个 50 字节的记录和 20 字节的填充符,您可以使 File-Record-Linkage 区域为 500 字节。这可能会减少未来的维护。
      • 通常可以在File-Driver 程序中写入/检查控制记录/页眉/页脚记录。应用程序不需要知道任何控制记录。在一个站点,我需要将页眉/页脚和文件验证添加到现有文件。我只需要更改Code Generation parameters,重新生成File-Driver 和一些基本测试。无需更改程序
      • File-Drivers 几乎相同。你可以
        • 将大部分 Working Storage代码 存储在 Copybooks 中并使用 Copy replacement
        • 使用代码生成
        • 标准副本修改
      • 文件驱动程序可以独立于调用程序进行测试。这在您使用文件验证时很方便。

      【讨论】:

        猜你喜欢
        • 2015-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多