2009-06-02 16 views
8

Quiero leer las líneas de STDIN (también conocido como SYSIN) en COBOL. Por ahora solo quiero imprimirlos para que sepa que los tengo. De todo lo que estoy leyendo parece que esto debería funcionar:Lee STDIN (SYSIN) en 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. 

que compila (uso de COBOL abierta y -x COBC), pero corriendo, me sale:

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

¿Qué estoy haciendo ¿incorrecto?

Respuesta

4

Me sugirieron lo siguiente en el OpenCOBOL forums.

SELECT SYSIN ASSIGN TO KEYBOARD ORGANIZATION LINE SEQUENTIAL. 

Es la palabra clave KEYBOARD que lo hace funcionar.

Aparentemente DISPLAY es una palabra similar para STDOUT, pero no lo he probado.

4

Mi COBOL se remonta a la miniordenadora DPS-6 runnong GCOS-6 y duró tocó eso en 1992. Pero en aquel entonces utilizamos ACCEPT para obtener entrada de stdin.

+0

Estoy de acuerdo con el uso de ACCEPT (aunque he leído que se considera una mala práctica para datos grandes), pero entonces ¿cómo construyo el ciclo para detectar EOF? – singpolyma

0

Puede utilizar la palabra clave ACCEPT para obtener la salida del teclado. Recorra hasta llegar a una palabra clave como 'final', o puede usar el valor hexadecimal de EOF (1A, creo).

como en:

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. 

que se llevará a todo lo que hasta un marcador de EOL (por ejemplo, el retorno).