- 「メインフレーム・コンピューター」で遊ぼう - http://www.arteceed.net -

CLIST入門(6)

CLIST入門(6):端末との入出力処理

CLISTには、コマンドやプログラムの反復実行の他に、TSOを使用するユーザーとの対話操作を行う、という側面もあります。このような場合に利用するのが端末入出力機能です。
CLISTにおける端末入出力は非常に易しく、単にWRITEあるいはREADステートメントを記述するだけです。

    端末へのメッセージ出力

    WRITEステートメントは、端末に指定したメッセージを書き出します。ディスプレイのカーソルはメッセージの最終行の次の行の最初のカラムに表示されます。

    ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
    WRITE ABCDEFGHIJKLMNOPQRSTUVWXYZ
    WRITE      RESULT = &LASTCC
    WRITE 1 2 3 4 5 6 7 8 9 0 &&A&&B
    WRITE A,B,C:D;'AGAGAG'   XYZ-+RT
    

    実行結果は次のようになります。

     ABCDEFGHIJKLMNOPQRSTUVWXYZ
          RESULT = 0
     1 2 3 4 5 6 7 8 9 0 &A&B
     A,B,C:D;'AGAGAG'   XYZ-+RT
    █
    

    空白は記述通りに表示されます。WRITEと表示させる文字列の間に2つ以上の空白を置くと、先行ブランクとして表示されます。記号や特殊文字も記述通りに表示されますが、&だけは変数の値を示す記号文字なので&自体を文字として表示させる場合は、&&ABCのように2つの&を続けて記述します。この例では、&LASTCCは変数LASTCCの値を、&&Aと&&Bは文字列&Aと&Bを表示させています。

    WRITEステートメントは、現在進行中のCLIST内の処理の状況や、発行したコマンドや呼び出したプログラムの実行結果などを表示するために利用できます。

    WRITEの代わりにWRITENRを使うと、メッセージ書き出しにカーソルは改行されず書き出されたメッセージ文字列の後に留まったままとなります。

    ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
    WRITENR ENTER DATASET NAME ==>
    

    実行結果は次のようになります。

     ENTER DATASET NAME ==> █
    

    WRITENRは、TSOユーザーに対してパラメーターなどの入力を促す、独自のプロンプト文字列の表示などに利用できます。


    READ:端末から文字列を入力する

    READステートメントは、端末から文字列を読み込みます。読み取られた文字列は指定した変数に格納されます。

    ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
    WRITENR ENTER DATASET NAME ==>
    READ INPUT_DATA
    WRITE YOUR INPUT IS = &INPUT_DATA
    WRITENR IS THIS ALL RIGHT? (Y/N)
    READ INPUT_YESNO
    

    実行結果は次のようになります。

     ENTER DATASET NAME ==> USR1.DATA.RF78KJY
     YOUR INPUT IS = USR1.DATA.RF78KJY
     IS THIS ALL RIGHT? (Y/N) █
    

    端末で入力された文字列は、READステートメントで指定した変数に格納されます。WRITEと異なり文字列に空白やカンマを含める場合は、全体をアポストロフィで囲みます。&は&&のように続けて2つ記述します。

     ENTER DATASET NAME ==> 'ABCDE&&FGHIJ KLMNO,PQRST'
     YOUR INPUT IS = ABCDE&FGHIJ KLMNO,PQRST
     IS THIS ALL RIGHT? (Y/N) █
    

CLISTと端末ユーザーとの対話によって、CLIST内でコマンドやプログラムに与えるパラメーターをダイナミックに生成し、必要な処理を順次に実行させることなどができるようにもなります。