我正在编写一个 COBOL 代码,但无法弄清楚为什么这个错误代码读取
“OPEN”不应从区域“A”开始。它被处理为好像在区域“B”中找到一样
具体来说,它指的PROCEDURE DIVISION是OPEN INPUT CUST-PROF
*-----------------------
IDENTIFICATION DIVISION.
*-----------------------
PROGRAM-ID. FSOC050
*--------------------
ENVIRONMENT DIVISION.
*--------------------
INPUT-OUTPUT SECTION.
*
FILE-CONTROL.
SELECT CUST-PROF ASSIGN TO CUSTPROF
ORGANIZATION IS SEQUENTIAL.
*-------------
DATA DIVISION.
*-------------
FILE SECTION.
FD CUST-PROF RECORDING MODE F.
01 CUST-PROF-01.
05 CUST-NO PIC X(6).
05 CUST-NAME PIC X(35).
05 CUST-STREET-ADDR PIC X(25).
05 CUST-CITY PIC X(11).
05 CUST-STATE PIC X(2).
05 CUST-CARD-TYPE PIC X(4).
05 CUST-CARD-EXP-MO PIC X(2).
05 CUST-CARD-EXP-YR PIC X(2).
05 CUST-CARD-NO PIC X(19).
05 FILLER PIC X(21).
*
WORKING-STORAGE SECTION.
01 CUST-NO-SRCH PIC X(6).
01 FLAGS.
05 LASTREC PIC X VALUE 'N'.
88 LAST-REC VALUE 'Y'.
*------------------
PROCEDURE DIVISION.
*------------------
OPEN-FILES.
ACCEPT CUST-NO-SRCH.
*
DISPLAY "SEARCH RECORDS FOR " CUST-NO-SRCH.
*
OPEN INPUT CUST-PROF.
*
PERFORM UNTIL LAST-REC
READ CUST-PROF
AT END SET LAST-REC TO TRUE
NOT AT END
IF CUST-NO-SRCH = CUST-NO
DISPLAY "CUSTOMER NAME = "
CUST-NAME
END-IF
END-READ
END-PERFORM.
*
CLOSE CUST-PROF.
STOP RUN.
*
Run Code Online (Sandbox Code Playgroud)
我已经编辑了您的问题以使用代码缩进来显示有问题的行(您已经看到了):
OPEN INPUT CUST-PROF.
Run Code Online (Sandbox Code Playgroud)
如果缩进看起来与您不同,则代码可能包含制表符。
回到问题:
为什么这个错误代码读取
“OPEN”不应从区域“A”开始。它被处理为好像在区域“B”中找到一样
编译器检查 ANSI COBOL 85 规则:语句应从区域 B 开始:
Columns Field Description
1-6 Sequence Area Often empty or line numbers, look out for shop specific rules
7 Indicator Asterisk (*) = comment line, Hyphen (-) = continuation line,
Slash ( / ) = form feed, D = debugging line
8-11 Area A COBOL definitions: divisions, sections, paragraphs, records and
some other entries must *begin* in Area A
12-72 Area B everything else, including COBOL statements, must begin in area B
73-nn Identification Area may contain notes, look out for shop specific rules
Run Code Online (Sandbox Code Playgroud)
编译器说:我很好地猜测这一行是从OPEN语句开始的有效行。