如何在cobol中清除屏幕并将光标位置设置到屏幕的末尾
因此,我尝试制作一个类似于屏幕的表单,用户在其中输入数据并将其保存在.txt文件中。我正在使用OpenCobolIDE,目前遇到了一些问题 在清除屏幕过程中。我在控制台屏幕上制作了一种表单,当用户输入数据时,我会用变量的新值刷新它,但是光标位置把我搞砸了,因为在我清除屏幕后,它会重置到控制台屏幕的开头,我希望在这个过程之后,它能转到我要显示的文本的末尾。我的解释可能令人困惑,但我希望您能从代码中理解我的观点:如何在cobol中清除屏幕并将光标位置设置到屏幕的末尾,cobol,gnucobol,Cobol,Gnucobol,因此,我尝试制作一个类似于屏幕的表单,用户在其中输入数据并将其保存在.txt文件中。我正在使用OpenCobolIDE,目前遇到了一些问题 在清除屏幕过程中。我在控制台屏幕上制作了一种表单,当用户输入数据时,我会用变量的新值刷新它,但是光标位置把我搞砸了,因为在我清除屏幕后,它会重置到控制台屏幕的开头,我希望在这个过程之后,它能转到我要显示的文本的末尾。我的解释可能令人困惑,但我希望您能从代码中理解我的观点: IDENTIFICATION DIVISION. PROGRAM-ID.PGM001.
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中,有两种类型的显示语句:用于设备的显示语句和用于屏幕的显示语句 在OpenCOBOL中,设备和屏幕显示不能同时使用;如果尝试,您会发现在第一次屏幕显示后,设备显示没有输出。这就是您的示例:CLEAR-SCREEN是在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
因为所有表单数据都可以一次性输入
但是,如果您希望保持数据输入的原样,可以通过在第行添加以下内容将设备显示转换为屏幕显示:
在当前无法使用扩展屏幕的项目中,GnuCOBOL执行的底层curses调用会重置输出,并且在程序结束后,您不会更改最终结果;其他供应商的终端经理也做了同样的事情,我想还是要清理一下屏幕 可能的选项包括:DISPLAY WORKING-STORAGE-PIC-X-2080-ITEM您可能希望根据预期的屏幕大小调整此选项,或者使用“clear”来调整便携式呼叫“SYSTEM”我没有尝试过,但这可能会起作用 正如@edward-h已经指出的那样:如果您使用扩展屏幕来完成整个程序,那么大部分操作都将自动完成,并且您还有其他选项,如空白屏幕子句或游标是特殊名称中的关键项,允许您获取和设置游标
但由于程序退出时屏幕将被删除:您主要希望添加一个接受或省略,如果您使用的版本不支持此扩展,请在程序退出之前接受PIC-X-ITEM-DUMMY。如果您使用的是最新版本的OCIDE for Windows,您可能已经使用了GnuCOBOL 1.1,您可以在首选项和“关于”对话框中对此进行检查。如果不是,我建议至少升级到GnuCOBOL 1.1或最近的开发快照。我尝试了第二种方法,但光标仍在等待第一行的输入,而不是屏幕的末尾。我是否也必须在ACCEPT语句中指定行或类似的内容?@levi moraes是的,您将:ACCEPT。。。在第5行,第5列应该起作用。
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