9

我想从 COBOL 中的 STDIN(又名 SYSIN)中读取行。现在我只想把它们打印出来,这样我就知道我有它们了。从我正在阅读的所有内容来看,这应该可以工作:

IDENTIFICATION DIVISION.
PROGRAM-ID. APP.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.

    SELECT SYSIN ASSIGN TO DA-S-SYSIN ORGANIZATION LINE SEQUENTIAL.

DATA DIVISION.
FILE SECTION.

FD SYSIN.
01 ln PIC X(255).
    88 EOF VALUE HIGH-VALUES.
WORKING-STORAGE SECTION.

PROCEDURE DIVISION.
    OPEN INPUT SYSIN
    READ SYSIN
      AT END SET EOF TO TRUE
    END-READ
    PERFORM UNTIL EOF
        DISPLAY ln
        READ SYSIN
            AT END SET EOF TO TRUE
        END-READ
    END-PERFORM
    CLOSE SYSIN
    STOP RUN.

编译(使用 open-cobol 和 cobc -x),但运行它我得到:

libcob: File does not exist (STATUS = 35) File : ''

我究竟做错了什么?

4

3 回答 3

6

以下是在OpenCOBOL 论坛上向我提出的建议。

SELECT SYSIN ASSIGN TO KEYBOARD ORGANIZATION LINE SEQUENTIAL.

让它起作用的是关键字 KEYBOARD。

显然 DISPLAY 是 STDOUT 的类似词,但我没有测试过。

于 2009-06-03T23:44:05.650 回答
4

我的 COBOL 可以追溯到运行 GCOS-6 的 DPS-6 小型计算机,我在 1992 年最后一次接触到它。但那时我们使用 ACCEPT 从标准输入获取输入。

于 2009-06-02T11:39:38.147 回答
0

您可以只使用 ACCEPT 关键字来获取键盘输出。循环直到你点击诸如“end”之类的关键字,或者你可以使用 EOF 的十六进制值(我相信是 1A)。

如:

1000-YOUR-PARAGRAPH.
  ACCEPT WS-YOUR-VARIABLE.
  DISPLAY WS-YOUR-VARIABLE.
  IF WS-YOUR-VARIABLE IS NOT EQUAL TO EOF
    THEN GO TO 1000-YOUR-PARAGRAPH
  ELSE GO TO 1090-EXIT
  END-IF.
1090-EXIT.
  EXIT.

这将使一切都达到 EOL 标记(例如退货)。

于 2009-07-12T11:19:19.780 回答