在COBOL中读取STDIN(SYSIN)

时间:2009-06-02 10:01:06

标签: select stdin cobol sysin

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

我做错了什么?

3 个答案:

答案 0 :(得分:5)

我在OpenCOBOL forums上建议了以下内容。

SELECT SYSIN ASSIGN TO KEYBOARD ORGANIZATION LINE SEQUENTIAL.

这是关键字KEYBOARD使它工作。

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

答案 1 :(得分:3)

我的COBOL可以追溯到DPS-6小型机运行GCOS-6并且我在1992年触及了它。但是当时我们使用ACCEPT从stdin获取输入。

答案 2 :(得分: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标记(例如返回)。