Pergunta

Eu quero ler as linhas de STDIN (aka SYSIN) em COBOL. Por agora eu só quero imprimi-los para que eu sei que eu tenho deles. De tudo que eu estou lendo, parece que isso deve funcionar:

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.

que compila (usando open-cobol e cobc -x), mas executá-lo eu recebo:

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

O que estou fazendo de errado?

Foi útil?

Solução

O seguinte foi-me sugerido na OpenCOBOL fóruns .

SELECT SYSIN ASSIGN TO KEYBOARD ORGANIZATION LINE SEQUENTIAL.

É a palavra-chave de teclado que faz funcionar.

Aparentemente Display é uma palavra semelhante para STDOUT, mas eu não testei isso.

Outras dicas

datas My COBOL voltar para o DPS-6 minicomputador runnong GCOS-6 e eu durou tocado que em 1992. Mas naquela época nós usamos ACEITAR para obter a entrada de stdin.

Você pode simplesmente usar o ACCEPT palavra-chave para a saída do teclado agarrar. Loop através até que atingiu uma palavra-chave como 'fim', ou você pode usar o valor hexadecimal de EOF (1A, eu acredito).

Como em:

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.

Isso vai levar tudo até um marcador EOL (por exemplo retorno).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top