2009-06-02 41 views
8

Tôi muốn đọc các dòng ra khỏi STDIN (aka SYSIN) trong COBOL. Bây giờ tôi chỉ muốn in chúng ra để tôi biết tôi có chúng. Từ tất cả những gì tôi đọc nó trông như thế này nên làm việc:Đọc STDIN (SYSIN) trong 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. 

Đó biên dịch (sử dụng mở COBOL và cobc -x), nhưng chạy nó tôi nhận được:

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

Tôi đang làm gì sai rồi?

Trả lời

4

Những điều sau đây được đề xuất cho tôi trên số OpenCOBOL forums.

SELECT SYSIN ASSIGN TO KEYBOARD ORGANIZATION LINE SEQUENTIAL. 

Đó là từ khóa KEYBOARD làm cho nó hoạt động.

Dường như DISPLAY là một từ tương tự cho STDOUT, nhưng tôi chưa thử nghiệm điều đó.

4

COBOL của tôi có ngày trở lại DPS-6 máy tính xách tay chạy nhanh GCOS-6 và tôi đã xúc động vào năm 1992. Nhưng khi đó chúng tôi đã sử dụng ACCEPT để nhận dữ liệu đầu vào từ stdin.

+0

Tôi đồng ý với việc sử dụng ACCEPT (mặc dù tôi đã đọc được coi là thực hành không tốt cho dữ liệu lớn), nhưng sau đó làm cách nào để xây dựng vòng lặp để phát hiện EOF? – singpolyma

0

Bạn chỉ có thể sử dụng từ khóa ACCEPT để lấy đầu ra bàn phím. Lặp lại cho đến khi bạn nhấn một từ khóa như 'kết thúc', hoặc bạn có thể sử dụng giá trị hex của EOF (1A, tôi tin).

Như trong:

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. 

đó sẽ đưa mọi thứ lên đến một điểm đánh dấu EOL (ví dụ cửa sổ mới).

Các vấn đề liên quan