cobol - WRITE AFTER ADVANCING 后跟 WRITE 导致 2 行出现在第一行 - 为什么?
问题描述
我在 Windows 上使用 COBOL PC 编译器从下面的代码中得到了这个结果。
REC 1
FFREC 2-AFTER PAGE
REC 3 AFTER 3REC 4
我可以理解第一行开头的FF。但是,最后一个输出行将REC 4 放在与记录 3 相同的行!我的问题是,MICRO FOCUS COBOL 或 IBM ENTERPRISE COBOL 或 Fujitsu COBOL 会产生相同的结果吗?如果是,如何解决此问题以使结果文件可以在 Windows 上查看?谢谢。
EDIT-1: 我发现如果我写:
MOVE "REC 4" TO FD-PRINT-REC
WRITE FD-PRINT-REC AFTER 1
然后文本“REC 4”出现在单独的行上。我假设这不是 ANSI 标准行为,我希望你能验证你的编译器做了什么。
编辑-2:
此线程中提出的另一个选项,“ASSIGN TO LINE ADVANCING”可能不适用于 ENTERPRISE COBOL(不确定): GNU COBOL 论坛相关线程
编码:
IDENTIFICATION DIVISION.
PROGRAM-ID. CALLER.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT PRINT-FILE ASSIGN TO "X.TXT"
ORGANIZATION IS LINE SEQUENTIAL.
*> --------------------------------------------------------------
DATA DIVISION.
FILE SECTION.
FD PRINT-FILE.
01 FD-PRINT-REC PIC X(132).
*>---------------------------------------------------------------
WORKING-STORAGE SECTION.
PROCEDURE DIVISION.
OPEN OUTPUT PRINT-FILE
MOVE "REC 1" TO FD-PRINT-REC
WRITE FD-PRINT-REC
MOVE "REC 2-AFTER PAGE" TO FD-PRINT-REC
WRITE FD-PRINT-REC AFTER PAGE
MOVE "REC 3 AFTER 3" TO FD-PRINT-REC
WRITE FD-PRINT-REC AFTER 3
MOVE "REC 4" TO FD-PRINT-REC
WRITE FD-PRINT-REC
CLOSE PRINT-FILE.
STOP RUN
.
解决方案
如果没有一个文件有 LINAGE 子句,那么如果任何程序使用带有 ADVANCING 短语的 WRITE 语句,则运行单元中所有具有 WRITE 语句的程序都必须使用带有 ADVANCING 短语的 WRITE 语句。IBM WRITE 语句
IDENTIFICATION DIVISION.
PROGRAM-ID. CALLER.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT PRINT-FILE ASSIGN TO "X.TXT"
ORGANIZATION IS LINE SEQUENTIAL.
*> --------------------------------------------------------------
DATA DIVISION.
FILE SECTION.
FD PRINT-FILE.
01 FD-PRINT-REC PIC X(132).
*>---------------------------------------------------------------
WORKING-STORAGE SECTION.
PROCEDURE DIVISION.
OPEN OUTPUT PRINT-FILE
MOVE "REC 1" TO FD-PRINT-REC
WRITE FD-PRINT-REC END-WRITE
MOVE "REC 2-AFTER PAGE" TO FD-PRINT-REC
WRITE FD-PRINT-REC AFTER PAGE END-WRITE
MOVE "REC 3 AFTER 3" TO FD-PRINT-REC
WRITE FD-PRINT-REC AFTER 3 END-WRITE
MOVE "REC 4" TO FD-PRINT-REC
WRITE FD-PRINT-REC END-WRITE
MOVE "REC 5" TO FD-PRINT-REC
WRITE FD-PRINT-REC AFTER 3 END-WRITE
MOVE "REC 6" TO FD-PRINT-REC
WRITE FD-PRINT-REC END-WRITE
MOVE "REC 7" TO FD-PRINT-REC
WRITE FD-PRINT-REC END-WRITE
CLOSE PRINT-FILE.
STOP RUN.
结果:
$ cat X.TXT
REC 1
REC 2-AFTER PAGE
REC 3 AFTER 3REC 4
REC 5REC 6
REC 7
推荐阅读
- python - Python/Django '类型对象不可迭代' Django Rest Framework (DRF)
- vue.js - 如果有人点击太快,如何防止不必要的点击?
- calculator - 在 Pascal 中使用大小写的添加菜单
- postgresql - 只读事务异常
- amazon-web-services - aws 凭据错误无法加载凭据
- android - 片段中的 ViewBinding 属性是否应该始终具有支持的不可为空的属性?
- email - 为什么在 ARC 检查转发的电子邮件后,DMARC auth_results 仍然报告 dkim 失败?
- python - 管理员 Django Rest Framework (DRF) 中的 Python/Django 'OperationalError'
- python-3.x - 如何使用 python 3.9.6 运行 anaconda 并启动 jupyter notebook?
- django-crispy-forms - 如何以脆的形式使所有字段一起只读(而不是一个一个)?