2009-06-02 10 views
8

Chcę przeczytać linie ze STDIN (aka SYSIN) w języku COBOL. Na razie chcę je wydrukować, żeby wiedzieć, że je mam. Od wszystkiego Czytam to wygląda jak to powinno działać:Przeczytaj STDIN (SYSIN) w języku 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. 

To kompiluje (z wykorzystaniem open-COBOL i cobc -x), ale uruchomione go uzyskać:

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

Co robię źle?

Odpowiedz

4

Następujący został mi zaproponowany na OpenCOBOL forums.

SELECT SYSIN ASSIGN TO KEYBOARD ORGANIZATION LINE SEQUENTIAL. 

To słowo kluczowe KEYBOARD sprawia, że ​​działa.

Wygląda na to, że DISPLAY jest podobnym słowem dla STDOUT, ale tego nie przetestowałem.

4

Mój COBOL sięga do minikomputera DPS-6 w GCOS-6 i trwało to w 1992 roku. Ale wtedy użyliśmy ACCEPT, aby uzyskać wejście ze stdin.

+0

Jestem w porządku przy użyciu ACCEPT zamiast (chociaż przeczytałem, że jest uważany za złe praktyki dla dużych danych), ale w jaki sposób mogę skonstruować pętlę do wykrycia EOF? – singpolyma

0

Możesz użyć słowa kluczowego ACCEPT, aby pobrać wyjście klawiatury. Przeprowadź pętlę, dopóki nie trafisz słowa kluczowego, takiego jak "koniec", lub możesz użyć wartości heksadecymalnej EOF (jak sądzę, 1A).

na przykład:

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. 

To będzie się wszystko do znacznika EOL (np Return).