Google
オフコン練習帳内を検索
インターネット全体を検索

NECオフコン関連
オフコン一般
情報
トップ  >  A-VXのジョブ制御言語(JCL)

A−VXのジョブ制御言語(JCL)

4 置換機能

JSLやPMLからジョブを実行しているとき、固定データやパラメータは「4 パラメータ」で書いたような方法でJSLやPMLから入力できます。ところが一部のデータはジョブ起動時に決定したいときがあります。このような場合に置換機能を使用します。

書式1:RUN文での例
[ラベル]/RUN run名,(入力データ1,入力データ2・・・);
&0_&1_・・・・
/> ;


置換パラメータは1回に最大10個までで、それぞれ最大17桁の文字列です。JSLやPMLからデータ入力中に、フィールドの先頭が「&n」のフィールドが検出されると、これらのフィールドの&nはnに対応するRUNコマンド、RUN文(/RUN)、制御変数設定文(/SET)の置換パラメータで置き換えられます。

具体的に「3 パラメータ」の例を使って説明します。簡単におさらいをします。
ファイルにアクセスしてプリンタに結果を出力するプログラム「PRG01」があり、アクセスするファイルは「MSD002」の「FILEA」で、結果を出力するプリンタは「PRN101」です。この場合は以下のように記述するのでした。

/RUN PRG01;
MSD002_FILEA_PRN101_
/> ;

このうち、ファイル名を置換機能を使用して入力してみることにします。すると以下のようになります。

/RUN PRG01,(FILEA);
MSD002_&0_PRN101_
/> ;

実行すると、&0が「FILEA」という文字列に置き換わってPRG01が実行されます。置換パラメータは&0から&9の最大10個まで使用できますから、全部置き換えて

/RUN PRG01,(MSD002,FILEA,PRN101);
&0_&1_&2_
/> ;

と書くことができます。(かっこ)の中は&0、&1、&2・・・の順番で書くことになっているので

/RUN PRG01,(PRN101,FILEA,MSD002);  <-&0、&1、&2の順番で書く
&2_&1_&0_       <-順番を変えた。
/> ;

という風にも書けます。

とここまで読んで、おそらく「わざわざ置換機能を使用するよりも直接記述したほうが良い。置換機能を使う意味がよくわからない。」と思われると思います。置換機能の本領を発揮するのはこれからです。

例えば、上の例でFILEAだけでなくFILEB、FILEC、FILEDでも同じことをする場合を考えてみましょう。普通にJSを書くと以下のようになるでしょう。

/RUN PRG01;
MSD002_FILEA_PRN101_
/> ;
/RUN PRG01;
MSD002_FILEB_PRN101_
/> ;
/RUN PRG01;
MSD002_FILEC_PRN101_
/> ;
/RUN PRG01;
MSD002_FILED_PRN101_
/> ;

RUN文でJSLからさらに別のJSLを実行できます。これと置換機能を組み合わせます。
まず1個目のJSLを作ります。「JSL01」という名前にしましょう。

* JSL01
/RUN PRG01;
MSD002_&0_PRN101_
/> ;

そして「JSL01」を実行するJSLを作ります。このJSLの名前は「JSL02」としましょう。

* JSL02
/RUN JS01,(FILEA);
/> ;
/RUN JS01,(FILEB);
/> ;
/RUN JS01,(FILEC);
/> ;
/RUN JS01,(FILED);
/> ;

「JSL02」を実行すると、
まず2行目のRUN文が実行され、「JS01」が呼び出されます。「JS01」の&0がFILEAという文字列に置き換わりPRG01が実行されます。
「JSL01」が終わるとまた「JSL02」に戻り、「JSL02」の4行目のRUN文が実行されます。今度は「JSL01」の&0がFILEBに置き換わり、RPG01が実行されます。
以降、6行目のRUN文、8行目のRUN文が同様に実行されることになります。

置換機能はこのように使用します。この例では置換機能のあまり効果が見えないかもしれませんが、うまく使えば非常に便利な機能です。

「普通はFILEAを使っているが、時々別のファイルを使います」、という場合は、規定値が使えます。
&nの後に規定値を書きます。

* JSL01
/RUN PRG01;
MSD002_&0FILEA_PRN101_
/> ;

「/RUN JS01,(FILEB);」とするとFILEBという文字列に置換され、「/RUN JS01;」とすると規定値のFILEAが使われます。

もうひとつの例を挙げます。#ABCというシステム付属のユーティリティを使用し、フロッピーディスクを初期化するJSLです。
初期化するフロッピーディスクの入っている装置が置換パラメータになっています。規定値がFDU000になっているので、置換パラメータに何も指定しないとFDU000に入っているフロッピーディスクが初期化されることになります。

// フロッピーディスクを初期化します;
/PAUSE フロッピーディスクを装置に入れて再開コマンドを実行してください;
/RUN #ABC,DEV=MSD;
MN1=09_MN2=03_PA1=&0FDU000_VNM=TESTFD_O01=YES_CFM=NO_FIL=NONE_SSZ=0256_ 
CMP=NO_
MN1=99_
/> ;



さらに例を挙げます。
さきほどはユーティリティを使った例を挙げましたが、今度はCOBOLアプリケーションの例です。
16文字の文字列、6桁の数字、8文字の文字列を順番に入力するプログラムです。

TESTAA
000010 IDENTIFICATION DIVISION.
000020**************************************
000030**          TEST                    **
000040**************************************
000050 PROGRAM-ID. TESTAA.
000060**
000070 ENVIRONMENT   DIVISION.
000080**
000090 DATA DIVISION.
000100 WORKING-STORAGE SECTION.
000110 01  DATA1 PIC X(16) VALUE SPACE.
000120 01  DATA2 PIC 9(6) VALUE ZERO.
000130 01  DATA3 PIC X(8) VALUE SPACE.
000140 SCREEN SECTION.
000150 SD  GAMEN
000160      END STATUS IS ENDSTS.
000170 01   TEST-KAKU.
000180     05 LINE 22.
000190     10  COLUMN 10 PIC X(16) FROM DATA1.
000200     10  COLUMN 30  PIC 9(6) FROM DATA2.
000210     10  COLUMN 40 PIC X(8) FROM DATA3.
000220 01  TEST1-ACT.
000230     05  LINE 10.
000240     10 COLUMN 15 PIC X(16) USING DATA1.
000250 01  TEST1-DSP.
000260     05  LINE 10.
000270     10 COLUMN 2 PIC X(8) VALUE "DATA1(X)".
000280 01  TEST2-ACT.
000290     05  LINE 14.
000300     10 COLUMN 15 PIC 9(6) USING DATA2.
000310 01  TEST2-DSP.
000320     05  LINE 14.
000330     10 COLUMN 2 PIC X(8) VALUE "DATA2(9)".
000340 01  TEST3-ACT.
000350     05  LINE 18.
000360     10 COLUMN 15 PIC X(8) USING DATA3.
000370 01  TEST3-DSP.
000380     05  LINE 18.
000390     10 COLUMN 2 PIC X(8) VALUE "DATA3(X)".
000400*****************  命令部  **********************
000410 PROCEDURE DIVISION.
000420 MPRG.
000430**   1個目の入力(16文字の文字列)
000440         DISPLAY TEST1-DSP.
000450         ACCEPT  TEST1-ACT.
000460**   2個目の入力(6桁の数字)
000470         DISPLAY TEST2-DSP.
000480         ACCEPT  TEST2-ACT.
000490**   3個目の入力(8文字の文字列)
000500         DISPLAY TEST3-DSP.
000510         ACCEPT  TEST3-ACT.
000520**   入力結果の表示
000530         DISPLAY TEST-KAKU.
000540      STOP "再開キーを押して".


下のJSは置換機能を使ってTESTAAというCOBOLアプリケーションを実行するJSです。

JTEST9
/RUN TESTAA,FIL=TESTAPLML,DEV=FDU;
&0AAAAA_&1000006_&2AAAAA_
/> ;


JSを実行してみます。


下の画面が実行した結果です。



制御変数設定文(/SET)を使用する場合も同様に使用できます。
COBOLプログラムで置換パラメータを使うために、2つのCOBOL85システムサブルーチン「SYSSPGET」「SYSSPPUT」が用意されています。