是否可以在 cobol 中循环显示多个屏幕?

Is it possible to display multiple screens in a loop in cobol?

所以我试图在 OpenCobolIDE 中制作一个程序,该程序使用 COBOL 中的 SCREEN SECTION 功能来创建一个菜单,用户可以在其中选择是要输入数据还是显示数据。 此数据记录在连续的 .txt 文件中。写的过程很顺利所以这里就不添加这部分的代码了。问题出在阅读过程中。我希望程序在 PERFORM 循环中多次显示 DISPLAY-SCREEN,显示我文件中的所有记录,但这不起作用。我认为通过从我的 DISPLAY-SCREEN 中删除 BLANK SCREEN 它会按照我想要的方式工作,但所有发生的事情是程序只显示 DISPLAY-SCREEN 并且它甚至不显示任何记录。可能是什么问题呢?这是代码:

IDENTIFICATION DIVISION.
PROGRAM-ID.PGM001.

ENVIRONMENT DIVISION.

INPUT-OUTPUT SECTION.

FILE-CONTROL.
    SELECT MYFILE ASSIGN TO "DATA.TXT"
    ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.

FILE SECTION.
FD MYFILE.
01 FS-TB.
    02 FS-ID    PIC X(03).
    02 FS-NAME  PIC A(15).
    02 FS-PHONE PIC X(09).
WORKING-STORAGE SECTION.
01 WS-TB.
    02 WS-ID    PIC X(03).
    02 WS-NAME  PIC A(15).
    02 WS-PHONE PIC X(09).
01 WS-EOF       PIC A(01) VALUE "N".
01 WS-COUNT     PIC 9(01) VALUE ZERO.
01 WS-OP        PIC 9(01).
SCREEN SECTION.
01 MENU-SCREEN.
    02 BLANK SCREEN.
    02 LINE 1  COL 1  VALUE "------------------------------------".
    02 LINE 2  COL 1  VALUE "-              MENU                -".
    02 LINE 3  COL 1  VALUE "------------------------------------".
    02 LINE 4  COL 1  VALUE "-          (1).REGISTER            -".
    02 LINE 5  COL 1  VALUE "-          (2).DISPLAY             -".
    02 LINE 6  COL 1  VALUE "-          (3).EXIT                -".
    02 LINE 7  COL 1  VALUE "-                                  -".
    02 LINE 8  COL 1  VALUE "           OPTION:( )              -".
    02 LINE 9  COL 1  VALUE "------------------------------------".
    02 LINE 8  COL 20 PIC 9(01) TO WS-OP.
01 DISPLAY-SCREEN.
    02 LINE 1  COL 1  VALUE "------------------------------------".
    02 LINE 2  COL 1  VALUE "-            DISPLAY               -".
    02 LINE 3  COL 1  VALUE "------------------------------------".
    02 LINE 4  COL 1  VALUE "-(1).ID         :                  -".
    02 LINE 4  COL 18 PIC X(03) FROM WS-ID.
    02 LINE 5  COL 1  VALUE "-(2).NAME       :                  -".
    02 LINE 5  COL 18 PIC A(15) FROM WS-NAME.
    02 LINE 6  COL 1  VALUE "-(3).PHONE      :                  -".
    02 LINE 6  COL 18 PIC X(09) FROM WS-PHONE.
    02 LINE 7  COL 1  VALUE "------------------------------------". 
PROCEDURE DIVISION.
A-100.
    DISPLAY MENU-SCREEN.
    ACCEPT  MENU-SCREEN.

    EVALUATE WS-OP
    WHEN 1
        GO TO A-200
    WHEN 2
        GO TO A-300
    WHEN 3
        STOP RUN
    WHEN OTHER
        GO TO A-100
    END-EVALUATE.
A-200.
A-300.
    OPEN INPUT MYFILE
        PERFORM UNTIL WS-EOF = "Y"
            READ MYFILE INTO WS-TB
                AT END MOVE "Y" TO WS-EOF
                NOT AT END DISPLAY DISPLAY-SCREEN
            END-READ
        END-PERFORM
    CLOSE MYFILE.

    STOP RUN.
END PROGRAM PGM001.

正如 Bill 已经指出的那样:PERFORMDISPLAY 太快了。

要查看每条记录,您需要在 DISPLAY 之后添加一个 ACCEPT,我想 ACCEPT OMITTED 可以工作,如果不添加虚拟变量和 ACCEPT 这个。

您似乎不想在 PERFORM 期间停止该程序,那么您可以在程序末尾添加一个 ACCEPT DUMMY(如果您使用扩展 DISPLAY/ACCEPT,这总是有用的)。但是您只会显示最后一项。

根据您的需要,在DISPLAY DISPLAY-SCREEN之后的CALL 'CBL_OC_NANOSLEEP' USING 500000000(等待半秒)或CALL 'C$SLEEP' USING 1可能就是您想要的结果。

但可能最好的选择是 ACCEPT dummy WITH TIMEOUT time(如果您按 ENTER,它会直接进入下一个 DISPLAY,如果您不这样做,它将等待指定的时间,然后再执行下一个 DISPLAY.