在COBOL中读取标准输入(STDIN或SYSIN)

11

我想在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个回答

7

以下是建议我在OpenCOBOL论坛上得到的。

SELECT SYSIN ASSIGN TO KEYBOARD ORGANIZATION LINE SEQUENTIAL.

关键字 KEYBOARD 使其工作。

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


5

我的COBOL编程经验可以追溯到运行GCOS-6操作系统的DPS-6小型计算机,我最后一次接触这个系统是在1992年。不过那时我们使用ACCEPT命令从标准输入中获取输入。


我可以使用ACCEPT(尽管我已经阅读过对于大数据来说这被认为是不好的做法),但是如何构建循环以检测EOF呢? - singpolyma

1

你可以使用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 标记(例如回车符)之前的所有内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接