首页 > 解决方案 > 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
     .  

标签: cobol

解决方案


如果没有一个文件有 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

推荐阅读