在COBOL中向地址标签程序添加头
你好,我是cobol的初学者,需要一些家庭作业帮助。我正在尝试编写一个程序,在输出端打印地址标签。但在输出中必须有标题、页码和日期。我已经成功地让程序以标签格式打印地址,但似乎无法让标题行(带有页面和日期)显示在上面。在我的程序中,有一个错误代码,表明我对数据文件的访问模式错误。我不确定这意味着什么。这是我的节目。我去掉了日期部分,只是想把标题行放在地址上面*编辑:我已经添加了“打印头输出”的打开和关闭,但现在它给了我错误代码“文件锁定”,有人能解释一下吗在COBOL中向地址标签程序添加头,cobol,Cobol,你好,我是cobol的初学者,需要一些家庭作业帮助。我正在尝试编写一个程序,在输出端打印地址标签。但在输出中必须有标题、页码和日期。我已经成功地让程序以标签格式打印地址,但似乎无法让标题行(带有页面和日期)显示在上面。在我的程序中,有一个错误代码,表明我对数据文件的访问模式错误。我不确定这意味着什么。这是我的节目。我去掉了日期部分,只是想把标题行放在地址上面*编辑:我已经添加了“打印头输出”的打开和关闭,但现在它给了我错误代码“文件锁定”,有人能解释一下吗 ENVIRONMENT DIVI
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT LABEL-FILE-IN
ASSIGN TO 'C0603.DAT'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT LABEL-FILE-OUT
ASSIGN TO 'C0603.RPT'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT PRINT-HEADER-OUT
ASSIGN TO 'C0603.RPT'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD LABEL-FILE-IN.
01 LABEL-RECORD-IN.
05 CUST-NAME-IN PIC X(20).
05 ADDRESS-IN PIC X(20).
05 CITY-STATE-ZIP-IN PIC X(20).
FD LABEL-FILE-OUT.
01 LABEL-RECORD-OUT.
05 PRINT-LABEL-OUT PIC X(20).
FD PRINT-HEADER-OUT.
01 REPORT-OUT PIC X(80).
WORKING-STORAGE SECTION.
01 ARE-THERE-MORE-RECORDS PIC X(3) VALUE 'YES'.
01 HEADING-LINE1.
05 PIC X(40) VALUE SPACES.
05 PIC X(12) VALUE
"MAILING LIST".
01 DATE-WS.
05 MONTH-WS PIC XX.
05 YEAR-WS PIC XX.
01 DATE-WS-OUT.
05 PIC X(45) VALUE SPACES.
05 MONTH-WS-OUT PIC XX.
05 VALUE "/".
05 YEAR-WS-OUT PIC XX.
PROCEDURE DIVISION.
000-MAIN-MODULE.
PERFORM 100-INITIALIZATION-MODULE.
PERFORM 200-PROCESS-ONE-RECORD
UNTIL ARE-THERE-MORE-RECORDS = "NO ".
PERFORM 900-TERMINATION-MODULE.
STOP RUN.
100-INITIALIZATION-MODULE.
OPEN OUTPUT PRINT-HEADER-OUT
OPEN INPUT LABEL-FILE-IN
OPEN OUTPUT LABEL-FILE-OUT
ACCEPT DATE-WS FROM DATE.
MOVE MONTH-WS TO MONTH-WS-OUT.
MOVE YEAR-WS TO YEAR-WS-OUT.
PERFORM 600-READ-MODULE.
PERFORM 300-TOP-OF-PAGE-MODULE.
200-PROCESS-ONE-RECORD.
MOVE SPACES TO PRINT-LABEL-OUT
MOVE CUST-NAME-IN TO PRINT-LABEL-OUT
WRITE LABEL-RECORD-OUT
MOVE ADDRESS-IN TO PRINT-LABEL-OUT
WRITE LABEL-RECORD-OUT
MOVE CITY-STATE-ZIP-IN TO PRINT-LABEL-OUT
WRITE LABEL-RECORD-OUT
PERFORM 600-READ-MODULE.
300-TOP-OF-PAGE-MODULE.
MOVE HEADING-LINE1 TO REPORT-OUT.
WRITE REPORT-OUT AFTER ADVANCING 9 LINES.
MOVE DATE-WS-OUT TO REPORT-OUT.
WRITE REPORT-OUT AFTER ADVANCING 1 LINES.
600-READ-MODULE.
READ LABEL-FILE-IN
AT END MOVE "NO " TO ARE-THERE-MORE-RECORDS
END-READ.
900-TERMINATION-MODULE.
CLOSE PRINT-HEADER-OUT.
CLOSE LABEL-FILE-IN.
CLOSE LABEL-FILE-OUT.
“错误代码表明我对数据文件的访问模式错误”是因为在执行语句WRITE REPORT-OUT时打印头文件未打开。所有文件在使用前都必须打开,并且在使用完毕后应始终关闭。我认为您遇到的问题是
标签文件和头文件都指向
相同的物理文件('C0603.RPT')。您可以这样做,但一次只能打开其中一个。这是
当您尝试在其他文件夹下再次打开“文件锁定”消息时,该消息的来源
名字
执行此操作的典型方法是打开一个文件,但有多个记录定义
给它写信
删除:
SELECT PRINT-HEADER-OUT
ASSIGN TO 'C0603.RPT'
ORGANIZATION IS LINE SEQUENTIAL.
并更改标签文件输出的FD,以包括标题记录
FD LABEL-FILE-OUT.
01.
05 LABEL-BUFFER PIC X(80).
05 LABEL-RECORD-OUT REDEFINES LABEL-BUFFER.
10 PRINT-LABEL-OUT PIC X(20).
10 PIC X(60).
05 PRINT-HEADER-OUT REDEFINES LABEL-BUFFER.
10 REPORT-OUT PIC X(80).
还有其他方法可以做到这一点,但基本思想是要有一个输出缓冲区,它是
至少与最大输出记录一样大,并重新定义它以供多种用途(标签或标题)
在写入标签行或标题行时,只需使用WRITE label-BUFFER
,然后将空格移到其中
在每次写入之后,确保在重新填充任何子对象之前正确初始化
数据项