Читать STDIN (SYSIN) в Коболе
Я хочу прочитать строки из 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 ответа
Следующее было предложено мне на форумах OpenCOBOL.
SELECT SYSIN ASSIGN TO KEYBOARD ORGANIZATION LINE SEQUENTIAL.
Это ключевое слово KEYBOARD, которое заставляет его работать.
Очевидно, DISPLAY - аналогичное слово для STDOUT, но я не проверял это.
Мой COBOL восходит к миникомпьютеру DPS-6, работающему под управлением GCOS-6, и я продолжил тронуть его в 1992 году. Но тогда мы использовали ACCEPT для получения информации от stdin.
Вы можете просто использовать ключевое слово ACCEPT, чтобы получить вывод с клавиатуры. Перебирайте, пока не нажмете ключевое слово, например, "конец", или вы можете использовать шестнадцатеричное значение EOF (я считаю, 1А).
Как в:
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 (например, возврат).