3

我在 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'

我究竟做错了什么?

4

3 回答 3

5

OCIDE 有一个输出目录的设置,默认是“bin”(相对于源文件)。实际上,它只是将此设置传递给编译器cobc source.cob -o bin\source.exe

您可以在设置Menu Preferences -> Compiler中更改此行为:

输出目录

此选项让您选择放置二进制文件的位置,默认情况下,二进制文件将放置在源文件旁边的 bin 文件夹中。如果需要,您可以定义另一个相对或绝对目录。

在任何情况下,您都可以在环境中设置实际名称,请查看GC FAQ - How to map a file name to an external name

作为替代方案,您可以使用环境 var 设置数据目录COB_FILE_PATH

两个环境选项都可以在设置Menu Preferences -> Run中设置。

于 2016-07-27T19:06:59.367 回答
4

大多数其他语言的 IDE 碰巧从另一个目录(例如它的构建位置)运行可执行文件。

一个简单的测试就是写一个测试程序,打开一个文件来写。你会很快看到会发生什么。

于 2016-07-27T18:41:46.580 回答
0

也许更好的是在 select 子句中写下完整路径。

select STUDENT ASSIGN TO '/xpto/folder1/input.txt'
于 2016-07-29T00:35:42.860 回答