【问题标题】:How to write an output which is longer than the maximum LRECL in COBOL?如何编写比 COBOL 中的最大 LRECL 更长的输出?
【发布时间】:2019-09-12 13:28:48
【问题描述】:

您是否曾经处理过超过 COBOL 中最大 LRECL 的 VBS 或 FBS 文件? 我想编辑比 32760 长得多的 LOB(大对象)记录,将它们写入文件,然后将它们传输到 Unix 服务器。 如果您已经有经验,如果您能给我一些处理技巧,那就太好了。

【问题讨论】:

    标签: cobol jcl


    【解决方案1】:

    这里是关于Spanned records in COBOL考虑的材料

    您可以为 QSAM 文件中的跨区记录编码 RECORDING MODE S 分配给磁带或直接访问设备。不要 请求 HFS 中文件的跨区记录。你可以省略 记录模式子句。编译器确定录制模式为 如果最大记录长度(以字节为单位)加 4 大于 在 BLOCK CONTAINS 子句中设置的块大小。

    对于程序中格式为 S 的文件,编译器确定 最大记录长度,规则与格式 V 相同。 长度取决于您对 RECORD 子句的使用情况。

    当创建包含 format-S 记录的文件并且记录是 大于块中的剩余空间,COBOL 写入一个段 填充块的记录。记录的其余部分存储在 下一个块或块取决于其长度。 COBOL 支持 QSAM 跨越的记录最长可达 32,760 字节。

    当检索具有 format-S 记录的文件时,程序可以 只检索完整的记录。

    这是一个explanation,用于存储长度超过 32,760 字节的记录。 ISPF 编辑不支持分段记录。它们是一种奇怪的野兽。

    【讨论】:

    • 道格·阿特的回忆,马特! ?
    • Ray,您还记得 IBM 在 COBOL 中添加 VBS 支持时的情况吗? IIRC 早在 VB 是禁忌的日子(ISAM 是当时的玩家),至少在 1982 年...... egad 我变老了。
    【解决方案2】:

    您可以从 COBOL(或其他符合 LE 的语言)调用 C 运行时例程。

    [...]
    
       Working-Storage Section.
       01  CONSTANTS.
           05  WS-FILE-OPTN            PIC X(003) VALUE Z'rb'.
    
       01  WORK-AREAS.
           05  WS-FILE                 POINTER VALUE NULL.
           05  WS-FILE-NM              PIC X(255).
    
    [...]
    
       Procedure Division.
       
    [...]
    
           CALL 'FOPEN' USING
             BY REFERENCE WS-FILE-NM
             BY REFERENCE WS-FILE-OPTN
             RETURNING WS-FILE
           END-CALL
           IF WS-FILE = NULL
             [error handling, maybe call perror()]
           END-IF
    

    通过这种方式,您可以将 I/O 委托给 C 运行时,并在 COBOL 中执行其余逻辑。

    请咨询C runtime library reference,以获取有关所选 I/O 功能所需参数的文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      • 2013-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      • 2020-01-28
      相关资源
      最近更新 更多