【发布时间】:2019-09-12 13:28:48
【问题描述】:
您是否曾经处理过超过 COBOL 中最大 LRECL 的 VBS 或 FBS 文件? 我想编辑比 32760 长得多的 LOB(大对象)记录,将它们写入文件,然后将它们传输到 Unix 服务器。 如果您已经有经验,如果您能给我一些处理技巧,那就太好了。
【问题讨论】:
您是否曾经处理过超过 COBOL 中最大 LRECL 的 VBS 或 FBS 文件? 我想编辑比 32760 长得多的 LOB(大对象)记录,将它们写入文件,然后将它们传输到 Unix 服务器。 如果您已经有经验,如果您能给我一些处理技巧,那就太好了。
【问题讨论】:
这里是关于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 编辑不支持分段记录。它们是一种奇怪的野兽。
【讨论】:
您可以从 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 功能所需参数的文档。
【讨论】: