带顺序文件的COBOL程序编译报0012错误,求排查解决
COBOL顺序文件程序编译报错(0012错误)排查与修复
问题概述
在大型机环境下编写的包含顺序文件操作的COBOL程序,使用指定JCL编译时返回0012错误,编译日志中出现IKF1157I-E、IKF4052I-E等多个报错;但仅包含DISPLAY语句的简单COBOL程序可正常编译。
COBOL程序代码
IDENTIFICATION DIVISION. PROGRAM-ID. TEST2. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT DATOS ASSIGN TO INPUTFL. DATA DIVISION. FILE SECTION. FD DATOS. 01 REG-DAT. 05 ID-LB PIC 9(10). 05 TITULO PIC X(16). 05 GEN-1 PIC X(8). 05 GEN-2 PIC X(11). 05 STOCK PIC 99. 05 FILLER PIC X(33). WORKING-STORAGE SECTION. 01 FIN PIC X VALUE 'N'. PROCEDURE DIVISION. 1000-ABRIR. OPEN INPUT DATOS PERFORM 2000-LEER UNTIL FIN = 'S' CLOSE DATOS STOP RUN. 2000-LEER. READ DATOS AT END MOVE 'S' TO FIN NOT AT END PERFORM 2100-MOSTRAR. 2100-MOSTRAR. DISPLAY 'ID LIBRO: ' ID-LB. DISPLAY 'TITULO: ' TITULO. DISPLAY 'GENERO PRINCIPAL: ' GEN-1. DISPLAY 'GENERO SECUNDARIO: ' GEN-2. DISPLAY 'STOCK: ' STOCK. DISPLAY '--------------------------------'.
JCL代码
//HERC0101 JOB (COBOL), // 'COBOL COMPILATION', // CLASS=A, // MSGCLASS=H, // REGION=8M,TIME=1440, // NOTIFY=HERC01, // MSGLEVEL=(1,1) //****************************************************************** //* //* THIS JOB HAS AS PURPOSE COMPILE THE COBOL CODE //* PROCEDURE LOCATED @ SYS2.PROCLIB(COBOL) //* //****************************************************************** //COMPILE EXEC COBOL, // PROG='TEST2', // PDSF='MBVT.APPLICBC.SRC', // PDSL='MBVT.APPLICBC.LOAD' /* //
编译报错日志(中文翻译)
6 IKF1155I-W 系统名中的设备类别无效,跳至下一个字段 6 IKF1141I-W 系统名中的文件组织字段无效,将采用顺序组织 6 IKF1157I-E 系统名中缺少外部名称 6 IKF2133I-W 缺少LABEL RECORDS子句,将采用DD卡选项 27 IKF4052I-E NOT 不能作为字母数字字面量的目标字段,已丢弃该语句 27 IKF4052I-E AT 不能作为字母数字字面量的目标字段,已丢弃该语句 27 IKF4052I-E END 不能作为字母数字字面量的目标字段,已丢弃该语句 28 IKF4072I-W 在过程名结束前已假设从被执行过程退出
错误分析与修复方案
1. 核心语法错误(IKF4052I-E)
第27行的READ语句格式不符合COBOL标准:原代码使用NOT AT END的写法错误,COBOL中需用ELSE来关联非AT END的逻辑。编译器误将NOT、AT、END识别为变量,导致报错。
修复后的READ语句:
2000-LEER. READ DATOS AT END MOVE 'S' TO FIN ELSE PERFORM 2100-MOSTRAR.
2. 文件控制子句缺失(IKF1157I-E及相关警告)
FILE-CONTROL段缺少必要的文件属性声明,导致编译器无法识别文件组织方式、标签记录等信息。
修复后的FILE-CONTROL段:
FILE-CONTROL. SELECT DATOS ASSIGN TO INPUTFL ORGANIZATION IS SEQUENTIAL LABEL RECORDS ARE STANDARD.
补充ORGANIZATION IS SEQUENTIAL明确文件为顺序组织,LABEL RECORDS ARE STANDARD指定标签记录类型,解决设备类别、外部名称相关的错误和警告。
3. 其他警告处理
IKF2133I-W(缺少LABEL RECORDS子句)和IKF4072I-W(流程退出假设)会随着上述两项修复自动解决,因为语法修正后编译器能正确解析程序逻辑。
内容的提问来源于stack exchange,提问作者Juan
相关产品推荐
相关产品推荐

