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