COBOL创建DAT文件失败,提示'EmployeeFile'未定义/非文件名
问题分析与解决方案
错误原因
出现'EmployeeFile' is not defined和'EmployeeFile' is not a file name错误,核心是两个问题导致:
- PERFORM语句语法违规:原代码中
PERFORM Until-Exit缺少UNTIL终止条件,不符合COBOL语法规范,导致编译器无法正确解析前面的文件定义。 - 字符串引号适配问题:部分COBOL编译器(如GnuCOBOL)要求字符串常量使用单引号,双引号会被解析为标识符而非文件路径字符串。
修正后的代码
IDENTIFICATION DIVISION. PROGRAM-ID. CreateEmployeeFile. DATA DIVISION. FILE SECTION. FD EmployeeFile LABEL RECORDS STANDARD VALUE OF FILE-ID IS 'EMPLOYEE.DAT' DATA RECORD IS EmployeeRecord. 01 EmployeeRecord. 05 EmployeeID PIC X(5). 05 EmployeeName PIC X(30). 05 Salary PIC 9(6)V99. WORKING-STORAGE SECTION. 01 EOF-Switch PIC X VALUE 'N'. 01 Temp-EmployeeID PIC X(5). 01 Temp-EmployeeName PIC X(30). 01 Temp-Salary PIC 9(6)V99. 01 Counter PIC 99 VALUE ZERO. 01 Choice PIC 9 VALUE ZERO. PROCEDURE DIVISION. Begin. OPEN OUTPUT EmployeeFile PERFORM Until-Exit UNTIL EOF-Switch = 'Y' CLOSE EmployeeFile STOP RUN. Until-Exit. DISPLAY "1. Add Record" DISPLAY "2. Exit" ACCEPT Choice EVALUATE Choice WHEN 1 PERFORM Add-Record WHEN 2 MOVE 'Y' TO EOF-Switch WHEN OTHER DISPLAY "Invalid choice, please enter 1 or 2" END-EVALUATE. Add-Record. DISPLAY "Enter Employee ID: " ACCEPT Temp-EmployeeID DISPLAY "Enter Employee Name: " ACCEPT Temp-EmployeeName DISPLAY "Enter Salary: " ACCEPT Temp-Salary MOVE Temp-EmployeeID TO EmployeeID OF EmployeeRecord MOVE Temp-EmployeeName TO EmployeeName OF EmployeeRecord MOVE Temp-Salary TO Salary OF EmployeeRecord WRITE EmployeeRecord DISPLAY "Record Added Successfully".
关键修改说明
- 补全PERFORM终止条件:添加
UNTIL EOF-Switch = 'Y',明确循环终止逻辑,修复编译器解析异常。 - 调整FILE-ID引号格式:将双引号改为单引号,适配多数COBOL编译器的字符串解析规则。
- 显式限定字段归属:MOVE操作中指定
OF EmployeeRecord,避免标识符重名导致的潜在问题。 - 增加无效输入处理:在EVALUATE中添加
WHEN OTHER分支,处理用户输入错误选项的情况,提升程序健壮性。
内容的提问来源于stack exchange,提问作者Renato D. Mejilla
相关产品推荐
相关产品推荐

