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

0 cobol mainframe

我正在编写一个 COBOL 代码,但无法弄清楚为什么这个错误代码读取

“OPEN”不应从区域“A”开始。它被处理为好像在区域“B”中找到一样

具体来说,它指的PROCEDURE DIVISIONOPEN 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)

Sim*_*sch 5

我已经编辑了您的问题以使用代码缩进来显示有问题的行(您已经看到了):

        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语句开始的有效行。