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_ /> ;
TESTAA
さらに例を挙げます。
さきほどはユーティリティを使った例を挙げましたが、今度はCOBOLアプリケーションの例です。
16文字の文字列、6桁の数字、8文字の文字列を順番に入力するプログラムです。
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 "再開キーを押して".
JTEST9
下のJSは置換機能を使ってTESTAAというCOBOLアプリケーションを実行するJSです。
/RUN TESTAA,FIL=TESTAPLML,DEV=FDU; &0AAAAA_&1000006_&2AAAAA_ /> ;
JSを実行してみます。
下の画面が実行した結果です。
制御変数設定文(/SET)を使用する場合も同様に使用できます。
COBOLプログラムで置換パラメータを使うために、2つのCOBOL85システムサブルーチン「SYSSPGET」「SYSSPPUT」が用意されています。