如何在cobol中清除屏幕并将光标位置设置到屏幕的末尾

时间:2016-09-13 00:03:53

标签: cobol gnucobol

所以我正在尝试制作一个类似于表单的屏幕,用户输入他的数据并将其保存在.txt文件中。我正在使用OpenCobolIDE,我目前正在经历问题 在清除屏幕过程中。我有一种形式,我在控制台屏幕上,当用户输入他的数据我用新的变量值刷新它,但光标位置搞砸了我,因为我清除屏幕后,它被重置为控制台屏幕的开头,我希望它转到我在此过程后显示的文本的末尾。我的解释可能看起来令人困惑,但我希望你对代码有所了解:

IDENTIFICATION DIVISION.
PROGRAM-ID.PGM001.

ENVIRONMENT DIVISION.

DATA DIVISION.

WORKING-STORAGE SECTION.
01 WS-DATA
    02 WS-ID    PIC X(03) VALUE SPACES.
    02 WS-NAME  PIC A(15) VALUE SPACES.
    02 WS-PHONE PIC X(09) VALUE SPACES.
SCREEN SECTION.
01 CLEAR-SCREEN.
    02 BLANK SCREEN.
PROCEDURE DIVISION.
MENU.
    DISPLAY "ID........:" WS-ID.
    DISPLAY "NAME......:" WS-NAME.
    DISPLAY "PHONE.....:" WS-PHONE.
    DISPLAY "-----------".

    DISPLAY "ID:".
    ACCEPT WS-ID FROM CONSOLE.

    DISPLAY CLEAR-SCREEN.
    DISPLAY "ID........:" WS-ID.
    DISPLAY "NAME......:" WS-NAME.
    DISPLAY "PHONE.....:" WS-PHONE.
    DISPLAY "-----------".

    DISPLAY "NAME:".
    ACCEPT WS-NAME FROM CONSOLE.

    DISPLAY CLEAR-SCREEN.
    DISPLAY "ID........:" WS-ID.
    DISPLAY "NAME......:" WS-NAME.
    DISPLAY "PHONE.....:" WS-PHONE.
    DISPLAY "-----------".

    DISPLAY "PHONE:".
    ACCEPT WS-PHONE FROM CONSOLE.

    DISPLAY CLEAR-SCREEN.
    DISPLAY "ID........:" WS-ID.
    DISPLAY "NAME......:" WS-NAME.
    DISPLAY "PHONE.....:" WS-PHONE.
    DISPLAY "-----------".

    STOP RUN.
END-PROGRAM PGM001.

所以你会注意到我一直在清理屏幕并显示在表格中,但是当我这样做时,光标会进入屏幕的开头,我无法继续输入数据。有谁可以帮助我吗?在cobol中是否有任何移动光标的命令?

2 个答案:

答案 0 :(得分:3)

在COBOL中,有两种类型的DISPLAY语句:用于设备的语句和用于屏幕的语句。

在OpenCOBOL中,设备和屏幕DISPLAY不能同时使用;如果你尝试,你会发现第一个屏幕DISPLAY后设备DISPLAY没有输出。这就是您的示例:CLEAR-SCREEN在屏幕部分定义,因此DISPLAY CLEAR-SCREEN是一个屏幕显示。

您可以通过在屏幕部分中定义条目表单来解决此问题:

SCREEN SECTION.
01  form BLANK SCREEN.
    03  VALUE "ID.........".
    03  COL + 2, PIC X(03) TO WS-ID.
    03  LINE + 1, VALUE "NAME.......".
    03  COL + 2, PIC A(15) TO WS-NAME.
    03  LINE + 1, VALUE "PHONE......".
    03  COL + 2, PIC X(09) TO WS-PHONE.
    03  LINE + 1, VALUE "-----------".

除了工作之外,这还有一个额外的好处,即程序划分可以减少到

 DISPLAY form
 ACCEPT form

因为所有表单数据都可以一次性输入。

但是,如果您希望保持数据输入,可以通过添加AT LINE <line-num>将设备DISPLAY转换为屏幕DISPLAY:

DISPLAY "ID........:" WS-ID AT LINE 1
DISPLAY "NAME......:" WS-NAME AT LINE 2
DISPLAY "PHONE.....:" WS-PHONE AT LINE 3
DISPLAY "-----------" AT LINE 4

DISPLAY "ID:" AT LINE 5
ACCEPT WS-ID AT LINE 5, COL 5

答案 1 :(得分:1)

在当前一个无法使用“扩展屏幕”的项目中(由GnuCOBOL完成的基础诅咒CALL重置输出,而在程序结束后你不会得到最终结果;其他供应商的“终端管理员”做同样的事情我想“仍然很清楚”屏幕。

可能的选项包括:DISPLAY WORKING-STORAGE-PIC-X-2080-ITEM(您可能希望根据预期的屏幕尺寸进行调整)或(不太便携)CALL 'SYSTEM' USING 'clear'(我没试过这个但这可能有用)。< / p>

正如@ edward-h已经指出的那样:如果您对完整程序使用“扩展”SCREEN,则大部分内容将自动完成,并且您还有其他选项,例如BLANK SCREEN子句或CURSOR IS key-item in SPECIAL-NAMES允许您同时获取和设置光标。

但由于屏幕将在程序退出时删除:您通常希望在程序退出之前添加ACCEPT OMITTED(或者,如果您使用的版本不支持此扩展名ACCEPT PIC-X-ITEM-DUMMY)。