如何清除屏幕并将光标位置设置为cobol中屏幕的末尾
How to clear screen and set cursor position to the end of the screen in cobol
所以我正在尝试制作一个类似表单的屏幕,用户可以在其中输入数据并将其保存在 .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 中有移动光标的命令吗?
在 COBOL 中,有两种类型的 DISPLAY 语句:一种用于设备,一种用于屏幕。
在OpenCOBOL中,设备和屏幕DISPLAY不能同时使用;如果你尝试,你会发现在第一个屏幕 DISPLAY 之后,设备 DISPLAYs 没有输出。这就是您的示例所发生的情况: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 "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
在无法使用 "extended screens" 的当前项目中(由 GnuCOBOL 完成的底层 curses CALL 会重置输出,您不会在程序结束后得到最终结果;其他供应商的 "terminal managers"完全一样)我想 "still kind-of-clear" 屏幕。
可能的选项包括:DISPLAY WORKING-STORAGE-PIC-X-2080-ITEM
(您可能需要根据预期的屏幕尺寸进行调整)或(便携性较差)CALL 'SYSTEM' USING 'clear'
(我没有尝试过,但这可能有效) .
正如@edward-h 已经指出的那样:如果您对整个程序使用 "extended" SCREEN,其中大部分将自动完成,您还有其他选项,例如 BLANK SCREEN
子句或 [= SPECIAL-NAMES
中的 13=] 允许您获取和设置光标。
但由于屏幕将在程序退出时被删除:您主要想在程序前添加一个 ACCEPT OMITTED
(或者,如果您使用的版本不支持此扩展 ACCEPT PIC-X-ITEM-DUMMY
)退出。
所以我正在尝试制作一个类似表单的屏幕,用户可以在其中输入数据并将其保存在 .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 中有移动光标的命令吗?
在 COBOL 中,有两种类型的 DISPLAY 语句:一种用于设备,一种用于屏幕。
在OpenCOBOL中,设备和屏幕DISPLAY不能同时使用;如果你尝试,你会发现在第一个屏幕 DISPLAY 之后,设备 DISPLAYs 没有输出。这就是您的示例所发生的情况: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 "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
在无法使用 "extended screens" 的当前项目中(由 GnuCOBOL 完成的底层 curses CALL 会重置输出,您不会在程序结束后得到最终结果;其他供应商的 "terminal managers"完全一样)我想 "still kind-of-clear" 屏幕。
可能的选项包括:DISPLAY WORKING-STORAGE-PIC-X-2080-ITEM
(您可能需要根据预期的屏幕尺寸进行调整)或(便携性较差)CALL 'SYSTEM' USING 'clear'
(我没有尝试过,但这可能有效) .
正如@edward-h 已经指出的那样:如果您对整个程序使用 "extended" SCREEN,其中大部分将自动完成,您还有其他选项,例如 BLANK SCREEN
子句或 [= SPECIAL-NAMES
中的 13=] 允许您获取和设置光标。
但由于屏幕将在程序退出时被删除:您主要想在程序前添加一个 ACCEPT OMITTED
(或者,如果您使用的版本不支持此扩展 ACCEPT PIC-X-ITEM-DUMMY
)退出。