Cobol 错误,似乎无法弄清楚

问题描述 投票:0回答:1

我在 COBOL 程序中遇到编译错误,编译器指示未定义“INPUT-FILE”和“OUTPUT-FILE”等文件名。尽管在程序的文件部分中定义了这些文件,但编译器似乎无法识别它们。我尝试调整 I/O 设置,但错误仍然存在。谁能帮助我理解为什么会发生这些错误以及如何解决它们?下面是我的 COBOL 代码片段供参考。

abc.cob:6: error: 'INPUT-FILE' is not defined
abc.cob:6: error: 'INPUT-FILE' is not a file name
abc.cob:11: error: 'OUTPUT-FILE' is not defined
abc.cob:11: error: 'OUTPUT-FILE' is not a file name
abc.cob:44: error: 'INPUT-FILENAME' is not defined
abc.cob:45: error: 'INPUT-FILENAME' is not a file name
abc.cob:46: error: 'OUTPUT-FILE' is not a file name
abc.cob: in paragraph 'PROC-BODY':
abc.cob:62: error: 'INPUT-FILE' is not a file name
abc.cob: in paragraph 'INPUT-LOOP':
abc.cob:87: error: 'INPUT-FILE' is not a file name
abc.cob: in paragraph 'END-OF-JOB':
abc.cob:94: error: 'INPUT-FILE' is not a file name
abc.cob:94: error: 'OUTPUT-FILE' is not a file name

我尝试过调整 I/O 设置,但没有效果。

   IDENTIFICATION DIVISION.
   PROGRAM-ID. Calculate-Mean-StdDev.

   DATA DIVISION.
   FILE SECTION.
   FD INPUT-FILE.
   01 INPUT-VALUE-RECORD.
      02 IN-X        PIC S9(6)V9(2).
      02 FILLER      PIC X(72).

   FD OUTPUT-FILE.
   01 OUTPUT-RECORD.
      02 OUTPUT-LINE PIC X(80).

   WORKING-STORAGE SECTION.
   77 SUM-OF-X-SQR   PIC 9(14)V9(2).
   77 SUM-OF-X       PIC S9(10)V9(2).
   77 N              PIC S9(4).
   77 MEAN           PIC S9(6)V9(2).
   77 I              PIC S9(4).
   01 ARRAY-AREA.
      02 X           PIC S9(6)V9(2) OCCURS 1000 TIMES.
   01 OUTPUT-TITLE-LINE.
      02 FILLER      PIC X(28) VALUE
                    " MEAN AND STANDARD DEVIATION".
   01 OUTPUT-UNDERLINE.
      02 FILLER      PIC X(28) VALUE
                    "----------------------------".
   01 OUTPUT-COL-HEADS.
      02 FILLER      PIC X(10) VALUE SPACES.
      02 FILLER      PIC X(11) VALUE "DATA VALUES".
   01 OUTPUT-DATA-LINE.
      02 FILLER      PIC X(10) VALUE SPACES.
      02 OUT-X       PIC -(6)9.9(2).
   01 OUTPUT-RESULTS-LINE-1.
      02 FILLER      PIC X(9) VALUE " MEAN=   ".
      02 OUT-MEAN    PIC -(6)9.9(2).
   01 OUTPUT-RESULTS-LINE-2.
      02 FILLER      PIC X(9) VALUE " STD DEV=".
      02 STD-DEVIATION    PIC -(6)9.9(2).

   PROCEDURE DIVISION.
       DISPLAY "Enter the input file name: "
       ACCEPT INPUT-FILENAME
       OPEN INPUT INPUT-FILENAME
            OUTPUT OUTPUT-FILE.
       MOVE ZERO TO IN-X.
       PERFORM PROC-BODY
          UNTIL IN-X IS NOT LESS THAN 999999.99.
       PERFORM END-OF-JOB.

   PROC-BODY.
       WRITE OUTPUT-RECORD FROM OUTPUT-TITLE-LINE
          AFTER ADVANCING 0 LINES.
       WRITE OUTPUT-RECORD FROM OUTPUT-UNDERLINE
          AFTER ADVANCING 1 LINE.
       WRITE OUTPUT-RECORD FROM OUTPUT-COL-HEADS
          AFTER ADVANCING 1 LINE.
       WRITE OUTPUT-RECORD FROM OUTPUT-UNDERLINE
          AFTER ADVANCING 1 LINE.
       MOVE ZERO TO SUM-OF-X.
       READ INPUT-FILE INTO INPUT-VALUE-RECORD
          AT END PERFORM END-OF-JOB.
       PERFORM INPUT-LOOP
          VARYING N FROM 1 BY 1
          UNTIL N IS GREATER THAN 1000 OR IN-X IS NOT LESS THAN 999999.98.
       SUBTRACT 1 FROM N.
       DIVIDE N INTO SUM-OF-X GIVING MEAN ROUNDED.
       MOVE ZERO TO SUM-OF-X-SQR.
       PERFORM SUM-LOOP
          VARYING I FROM 1 BY 1
          UNTIL I IS GREATER THAN N.
       COMPUTE STD-DEVIATION ROUNDED = (SUM-OF-X-SQR / N) ** 0.5.
       WRITE OUTPUT-RECORD FROM OUTPUT-UNDERLINE
          AFTER ADVANCING 1 LINE.
       MOVE MEAN TO OUT-MEAN.
       WRITE OUTPUT-RECORD FROM OUTPUT-RESULTS-LINE-1
          AFTER ADVANCING 1 LINE.
       WRITE OUTPUT-RECORD FROM OUTPUT-RESULTS-LINE-2
          AFTER ADVANCING 1 LINE.

   INPUT-LOOP.
       MOVE IN-X TO X(N), OUT-X.
       WRITE OUTPUT-RECORD FROM OUTPUT-DATA-LINE
          AFTER ADVANCING 1 LINE.
       ADD X(N) TO SUM-OF-X.
       READ INPUT-FILE INTO INPUT-VALUE-RECORD
          AT END PERFORM END-OF-JOB.

   SUM-LOOP.
       COMPUTE SUM-OF-X-SQR = SUM-OF-X-SQR + (X(I) - MEAN) ** 2.

   END-OF-JOB.
       CLOSE INPUT-FILE, OUTPUT-FILE.
       STOP RUN.

我 已尝试调整 I/O 设置,但错误仍然存在。谁能帮助我理解为什么会发生这些错误以及如何解决它们?下面是我的 COBOL 代码片段供参考。

cobol
1个回答
0
投票

在您的识别部门和数据部门之间,您需要一个环境部门,其中您需要一个输入输出部分,其中您需要一个文件控制段落,其中您需要为文件编写 Select 语句。

Environment Division.
Input-Output Section.
File-Control.
    Select INPUT-FILE  Assign To INPUT-FILE-NAME.
    Select OUTPUT-FILE Assign To '~/output-file'.

上面只是徒手写的,未经测试,假设 GNU COBOL 当您使用它们的扩展时,其中

Assign To
的目标可以是变量。

您需要更改代码,以便

INPUT-FILE
语句将文件名放入其中的
ACCEPT
变量与
SELECT
FD
语句中的文件名不同,上面我使用
INPUT-FILE-NAME 做到了这一点
.

你的代码中可能还有其他问题,我没有做详尽的分析。

© www.soinside.com 2019 - 2024. All rights reserved.