Cobol 这个返回码是什么意思?IGYPS009-E

Cobol 这个返回码是什么意思?IGYPS009-E,cobol,mainframe,Cobol,Mainframe,我正在编写一个COBOL代码,无法理解为什么这个错误代码 “打开”不应在区域“A”中开始。对其进行处理,就像在区域“B”中发现一样 具体而言,它指的是开放式输入CUST-PROF *----------------------- IDENTIFICATION DIVISION. *----------------------- PROGRAM-ID. FSOC050 *-------------------- E

我正在编写一个COBOL代码,无法理解为什么这个错误代码

“打开”不应在区域“A”中开始。对其进行处理,就像在区域“B”中发现一样

具体而言,它指的是
开放式输入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.
      *

我已经对你的问题进行了编辑,添加了代码缩进,其中显示了有问题的行(你已经看到了):

如果缩进在您看来不一样,代码可能包含制表符

回到问题上来:

为什么会出现这样的错误代码

“打开”不应在区域“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

编译器说:我猜这一行应该是以
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

编译器说:我猜这一行应该是以
OPEN
语句开头的有效行。

我写COBOL已经20年了,但我第一眼看到了错误。问问自己,为什么
OPEN-INPUT
语句与其他语句排列不一致,你就会得到答案。我写COBOL已经20年了,但我一眼就看到了错误。问问自己为什么
openinput
语句与其他语句排列不一致,你就会得到答案。