您是否曾经处理过 VBS 或 FBS 文件,其 LRECL 超过最大 COBOL? 我想编辑比 32760 长得多的 LOB(大对象(记录,将它们写入文件,并将它们传输到 Unix 服务器。 如果您已经有经验,如果您能给我一些处理技巧,那就太好了。
以下是有关 COBOL 中跨区记录注意事项的材料
您可以为 QSAM 文件中的跨区记录编写录制模式 S,这些记录是 分配给磁带或直接访问设备。不要 请求跨越 HFS 中文件的记录。您可以省略 录制模式子句。编译器将录制模式确定为 如果最大记录长度(以字节为单位(加 4 大于 S,则为 S 在块包含子句中设置的块大小。
对于程序中格式为 S 的文件,编译器将确定 最大记录长度与格式 V 使用的规则相同。 长度基于您对 RECORD 子句的使用情况。
创建包含格式 S 记录的文件时,记录 大于块中的剩余空间,COBOL 写入一段 要填充块的记录。记录的其余部分存储在 下一个块或块取决于其长度。COBOL 支持 QSAM 跨越长度达 32,760 字节的记录。
检索具有 S 格式记录的文件时,程序可以 仅检索完整的记录。
下面是存储长度超过 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 中执行其余的逻辑。
有关所选 I/O 函数所需参数的文档,请参阅 C 运行时库参考。