2016-09-13 57 views
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. 

だから私は、画面をクリアして、フォームをdisplayin続けることに気づくでしょうが、私はそれを行うと、カーソルがの先頭に行きます画面と私はデータを入力し続けることはできません。誰かが私を助けることができますか?カーソルを動かすコマンドがありますか?

+0

Windows用のOCIDEの最新バージョンを使用している場合は、すでにGnuCOBOL 1.1を使用している可能性があります(これは環境設定とaboutダイアログで確認できます)。そうでない場合は、少なくともGnuCOBOL 1.1(または最近の開発スナップショット)にアップグレードすることをお勧めします。 –

答えて

3

COBOLには、デバイス用のものと画面用のものの2種類のDISPLAY文があります。

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 

に減らすことができるという追加の利点を持っていますすべてのフォームデータを一度に入力することができます。しかし、あなたはそれがあるように、データエントリを維持したい、あなたは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 
+0

私は2番目の方法を試しましたが、カーソルはまだ画面の最後ではなく最初の行の入力を待っています。私はACCEPT文のような行を指定する必要がありますか? –

+0

@ levi-moraesはい、あなたは次のようになります:5行目で、COLUMN 5が動作するはずです。 –

+0

@LeviMoraes:これをあなたの問題への回答としてマークしてください - それともまだ開いている質問がありますか? –

1

(GnuCOBOLによって行われた根本的なcurses CALLは出力をリセットし、プログラム終了後の最終結果ではなく、他のベンダーの「端末マネージャー」も全く同じです)私は画面を「やっとクリア」したいと思っていました。

可能なオプションは、DISPLAY WORKING-STORAGE-PIC-X-2080-ITEM(予想される画面サイズに応じて調整したい場合があります)または(移植性が低い)CALL 'SYSTEM' USING 'clear'(これは試しませんでしたが、これはうまくいく可能性があります)。エドワード-H @として

は、すでに指摘した:あなたは完全なプログラムのための「拡張」画面を使用している場合は、このの多くは自動的に行われます、あなたはBLANK SCREEN句またはSPECIAL-NAMESCURSOR IS key-itemのような追加のオプションを持っているあなたが得るために両方が可能とカーソルを設定します。

プログラム終了時に画面が削除されるため、プログラムが終了する前に、ACCEPT OMITTED(または使用するバージョンがこの拡張子ACCEPT PIC-X-ITEM-DUMMYをサポートしていない場合)を追加することがほとんどです。

関連する問題