2

所以我正在尝试制作一个类似表单的屏幕,用户可以在其中输入他的数据并将其保存在 .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中有没有移动光标的命令?

4

2 回答 2

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

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

但是,如果您想保持数据输入不变,您可以通过添加以下内容将设备 DISPLAY 转换为屏幕 DISPLAY AT LINE <line-num>

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
于 2016-09-13T17:44:59.440 回答
1

在当前无法使用“扩展屏幕”的项目中(GnuCOBOL 完成的底层诅咒 CALL 重置输出,程序结束后您不会得到最终结果;其他供应商的“终端管理器”也一样)我想要以“仍然有点清晰”屏幕。

可能的选项包括:(DISPLAY WORKING-STORAGE-PIC-X-2080-ITEM您可能需要根据预期的屏幕尺寸进行调整)或(不太便携)CALL 'SYSTEM' USING 'clear'(我没有尝试过,但这可能有效)。

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

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

于 2016-09-13T18:39:36.937 回答