我在 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 代码片段供参考。
在您的识别部门和数据部门之间,您需要一个环境部门,其中您需要一个输入输出部分,其中您需要一个文件控制段落,其中您需要为文件编写 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
做到了这一点
.
你的代码中可能还有其他问题,我没有做详尽的分析。