Читать STDIN (SYSIN) в Коболе - PullRequest
8 голосов
/ 02 июня 2009

Я хочу прочитать строки из STDIN (он же SYSIN) в COBOL. Сейчас я просто хочу распечатать их, чтобы я знал, что у меня есть. Из всего, что я читаю, похоже, что это должно работать:

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 ]

5 голосов
/ 04 июня 2009

На форумах OpenCOBOL .

мне было предложено следующее.
SELECT SYSIN ASSIGN TO KEYBOARD ORGANIZATION LINE SEQUENTIAL.

Это ключевое слово KEYBOARD, которое заставляет его работать.

Очевидно, DISPLAY - это то же самое слово, что и STDOUT, но я не проверял это.

3 голосов
/ 02 июня 2009

Мой COBOL восходит к миникомпьютеру DPS-6, работающему в GCOS-6, и я продолжал тронуть его в 1992 году. Но тогда мы использовали ACCEPT для получения ввода от stdin.

0 голосов
/ 12 июля 2009

Вы можете просто использовать ключевое слово ACCEPT, чтобы получить вывод с клавиатуры. Перебирайте, пока не нажмете ключевое слово, например, «конец», или вы можете использовать шестнадцатеричное значение 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 (например, возврат).

...