Read STDIN (SYSIN) in COBOL

别说谁变了你拦得住时间么 提交于 2019-12-10 12:50:02

问题


I want to read the lines out of STDIN (aka SYSIN) in COBOL. For now I just want to print them out so that I know I've got them. From everything I'm reading it looks like this should work:

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.

That compiles (using open-cobol and cobc -x), but running it I get:

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

What am I doing wrong?


回答1:


The following was suggested to me on the OpenCOBOL forums.

SELECT SYSIN ASSIGN TO KEYBOARD ORGANIZATION LINE SEQUENTIAL.

It's the keyword KEYBOARD that makes it work.

Apparently DISPLAY is a similar word for STDOUT, but I have not tested that.




回答2:


My COBOL dates back to the DPS-6 minicomputer runnong GCOS-6 and I lasted touched that in 1992. But back then we used ACCEPT to get input from stdin.




回答3:


You can just use the ACCEPT keyword to grab keyboard output. Loop through until you hit a keyword such as 'end', or you can use the hex value of EOF (1A, I believe).

As in:

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.

That will take everything up to an EOL marker (e.g. return).



来源:https://stackoverflow.com/questions/938760/read-stdin-sysin-in-cobol

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!