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文には、デバイス用と画面用の2種類があります。

OpenCOBOL では、デバイスと画面の 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 に答える