在 COBOL 中打开文件进行读取
Opening file for reading in COBOL
我在 Windows 10 上使用 OpenCobolIDE 4.7.4(它基于 GnuCOBOL)并尝试编译这个程序打开一个文件进行读取:
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT ASSIGN TO 'input.txt'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD STUDENT.
01 STUDENT-FILE.
05 STUDENT-ID PIC 9(5).
05 NAME PIC A(25).
WORKING-STORAGE SECTION.
01 WS-STUDENT.
05 WS-STUDENT-ID PIC 9(5).
05 WS-NAME PIC A(25).
01 WS-EOF PIC A(1).
PROCEDURE DIVISION.
OPEN INPUT STUDENT.
PERFORM UNTIL WS-EOF='Y'
READ STUDENT INTO WS-STUDENT
AT END MOVE 'Y' TO WS-EOF
NOT AT END DISPLAY WS-STUDENT
END-READ
END-PERFORM.
CLOSE STUDENT.
STOP RUN.
input.txt和源代码在同一个目录下,但是我仍然得到以下错误:
Main.cob:24: libcob: File does not exist (STATUS = 35) File : 'input.txt'
我做错了什么?
其他语言的大多数 IDE 碰巧 运行 来自另一个目录(例如它的构建位置)的可执行文件。
一个简单的测试就是写一个测试程序,打开一个文件进行写入。
您很快就会看到会发生什么。
OCIDE对输出目录有设置,默认是"bin"(相对于源文件)。实际上它只是将此设置传递给编译器 cobc source.cob -o bin\source.exe
您可以在设置中更改此行为 Menu Preferences -> Compiler:
Output directory
This option let you chose where to put the binaries, by default binaries will be placed into a bin folder next to the source file. You can define another relative or absolute directory if you want.
在任何情况下您都可以在环境中设置实际名称,检查GC FAQ - How to map a file name to an external name。
作为替代方案,您可以使用环境变量 COB_FILE_PATH
.
设置数据目录
两个环境选项都可以在设置中设置 Menu Preferences -> Run。
也许更好的做法是在 select 子句中写入完整路径。
select STUDENT ASSIGN TO '/xpto/folder1/input.txt'
我在 Windows 10 上使用 OpenCobolIDE 4.7.4(它基于 GnuCOBOL)并尝试编译这个程序打开一个文件进行读取:
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT ASSIGN TO 'input.txt'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD STUDENT.
01 STUDENT-FILE.
05 STUDENT-ID PIC 9(5).
05 NAME PIC A(25).
WORKING-STORAGE SECTION.
01 WS-STUDENT.
05 WS-STUDENT-ID PIC 9(5).
05 WS-NAME PIC A(25).
01 WS-EOF PIC A(1).
PROCEDURE DIVISION.
OPEN INPUT STUDENT.
PERFORM UNTIL WS-EOF='Y'
READ STUDENT INTO WS-STUDENT
AT END MOVE 'Y' TO WS-EOF
NOT AT END DISPLAY WS-STUDENT
END-READ
END-PERFORM.
CLOSE STUDENT.
STOP RUN.
input.txt和源代码在同一个目录下,但是我仍然得到以下错误:
Main.cob:24: libcob: File does not exist (STATUS = 35) File : 'input.txt'
我做错了什么?
其他语言的大多数 IDE 碰巧 运行 来自另一个目录(例如它的构建位置)的可执行文件。
一个简单的测试就是写一个测试程序,打开一个文件进行写入。 您很快就会看到会发生什么。
OCIDE对输出目录有设置,默认是"bin"(相对于源文件)。实际上它只是将此设置传递给编译器 cobc source.cob -o bin\source.exe
您可以在设置中更改此行为 Menu Preferences -> Compiler:
Output directory
This option let you chose where to put the binaries, by default binaries will be placed into a bin folder next to the source file. You can define another relative or absolute directory if you want.
在任何情况下您都可以在环境中设置实际名称,检查GC FAQ - How to map a file name to an external name。
作为替代方案,您可以使用环境变量 COB_FILE_PATH
.
两个环境选项都可以在设置中设置 Menu Preferences -> Run。
也许更好的做法是在 select 子句中写入完整路径。
select STUDENT ASSIGN TO '/xpto/folder1/input.txt'