マクロ制御文
本章では、マクロ制御文と各オペランドについて説明します。
1. 概要
以下は、マクロ制御文の一覧です。
マクロ制御文 | 説明 |
---|---|
指定された条件に従ってDOグループ(DO文からEND文まで)を繰り返します。 |
|
DO文の終わりを示します。 |
|
IF文に指定されたパラメータの値が与えられた条件を満たす場合、マクロ展開のフローを変更します。 |
|
指定したメンバーの内容をJCL文に含めます。 |
|
何の動作も行いません。 |
|
PEXIT文までを実行し、以降は無視します。 |
|
内部パラメータの値を変更します。 |
|
マクロ展開のフローを、SKIP文に記述された名前を有する構文(ジョブ制御 文またはマクロ制御文)に移動します。 |
2. DO文
指定された条件に従ってDOグループ(DO文からEND文まで)を繰り返します。
-
構文
/\[名前]△¹DO△¹制御パラメータ名={初期値}△¹TO△¹{終了値}△¹[ BY △¹増分値]△¹[コメント]
項目 説明 名前
名前を記述する位置であり、「/\」に続く3桁目から8文字以内の記号名称で記述します。名前は省略できます。
DO
オペレーションを記述する位置であり、名前の後ろに1つ以上の空白を入れて「DO」と記述します。
名前を省略した場合、「/\」の後ろに1つ以上の空白を入れて記述します。DO文の終了は必ずEND文を記述します。
制御パラメータ名
DOグループ(DO文を始めとしEND文まで)を繰り返す制御パラメータです。
初期値から始めて終了値まで繰り返してから終了します。繰り返すたびに増分値が加わり、増分値がない場合には1ずつ増加します。
初期値
制御パラメータの初期値です。(0以上の数値で記述します)
TO
オペレーションを記述する位置であり、初期値の後ろに1つ以上の空白を入れて「TO」と記述します。
終了値
制御パラメータの終了値です。(0以上の数値で記述します)
BY
オペレーションを記述する位置であり、初期値の後ろに1つ以上の空白を入れて「BY」と記述します。
増分値
制御パラメータの増分値です。(0以上の数値で記述します)
コメント
定数やパラメータ名の次に1つ以上の空白を入れて記述します。コメントは71桁目まで記述できます。
-
例
以下は、指定された条件(1から4まで)に従ってDOグループを繰り返す例です。
//********************************************************* //* MACRO DO (MACDO) //********************************************************* //PROC01 PROC /\DO01 DO N=1 TO 4 //PS010 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=* /\END01 END
上記のようにマクロが定義されたプロシージャ(MACDO)を呼び出すと、PS010ステップが4回繰り返されます。
//MAC JOB JOB1,CLASS=A,MSGCLASS=X //STEP1 EXEC MACDO
3. END文
END文とDO文はペアで使用されます。DOグループ(DO文を始めとしEND文まで)の終わりを示します。
-
構文
/\[名前]△¹END△¹[コメント]
項目 説明 名前
名前を記述する位置であり、「/\」に続く3桁目から8文字以内の記号名称で記述します。名前は省略できます。
END
オペレーションを記述する位置であり、名前の後ろに1つ以上の空白を入れて「END」と記述します。名前を省略した場合は、「/\」の後ろに1つ以上の空白を入れて記述します。
コメント
ENDの後ろに1つ以上の空白を入れて記述します。コメントは71桁目まで記述できます。
-
例
/\S1 END
4. IF文
IF文に指定されたパラメータの値を比較して条件を満たす場合はマクロ展開のフローを変更します。
-
構文
/\[名前]△¹IF△¹条件,分岐先△¹[コメント]
項目 説明 名前
名前を記述する位置であり、「/\」に続く3桁目から8文字以内の記号名称で記述します。名前は省略できます。
IF
オペレーションを記述する位置であり、名前の後ろに1つ以上の空白を入れて「IF」と記述します。名前を省略した場合は、「/\」の後ろに1つ以上の空白を入れて記述します。
条件
IFの後ろに1つ以上の空白を入れて条件を記述します。
左辺 演算子 右辺 ------------------------------------------------------------------------------- パラメータ名 {=|^=|=N|<|>|<=|>=} {値}
-
パラメータ名: 比較対象の値が保存されているパラメータ名です。
-
= : 左辺と右辺の値が等しい場合、分岐先へ移動します。
-
^=または=N : 左辺と右辺の値が異なる場合、分岐先へ移動します。
-
値: 比較対象の値です。引用符号付き文字列で指定します。
分岐先
条件とコンマの後ろに分岐先を記述します。
以下は、分岐先についての説明です。分岐先を記述する位置には、名前またはパラメータ名を記述することができます。
-
名前: 移動する場所(ジョブ制御文またはマクロ制御文)の名前です。
-
パラメータ名: 移動する場所の名前が保存されているパラメータ名です。
コメント
分岐先の後ろに1つ以上の空白を入れて記述します。コメント71桁目まで記述できます。
-
-
例
以下は、条件の右辺に値を指定し、分岐先の名前を直接指定する場合の例です。
//********************************************************* //* MACRO IF (MACIF) //********************************************************* //PROC01 PROC /\IF01 IF PASS=YES,LABEL01 //PS010 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=* /\LABEL01 NOP //PS020 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=*
上記のようなマクロが定義されたプロシージャ(MACIF)を呼び出して展開された結果は以下のとおりです。
//MAC JOB JOB1,CLASS=A,MSGCLASS=X //STEP1 EXEC MACIF,PASS=YES
[ 結果 ]
//MAC JOB JOB1,CLASS=A,MSGCLASS=X //PS020 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=*
5. INCLUDE文
指定したプロシージャの内容をJCL文に含めます。
-
構文
/\[名前]△¹INCLUDE△¹プロシージャ名△¹[コメント]
項目 説明 名前
名前を記述する位置であり、「/\」に続く3桁目から8文字以内の記号名称で記述します。名前は省略できます。
INCLUDE
オペレーションを記述する位置であり、名前の後ろに1つ以上の空白を入れて「INCLUDE」と記述します。名前を省略した場合は、「/\」の後ろに1つ以上の空白を入れて記述します。
プロシージャ名
JCL文に含ませるプロシージャ名を記述します。
INCLUDE文で指定したプロシージャにはPROC文を記述できません。
-
例
以下は、指定したプロシージャの内容をJCLに含ませる場合の例です。
//********************************************************* //* MACRO INCLUDE (MACINC) //********************************************************* //SYSOUT DD SYSOUT=*
上記のようにマクロが定義されたプロシージャ(MACINC)を呼び出して展開した結果は以下のとおりです。
//PROC01 PROC //PS010 EXEC PGM=pgmtest_environ /\INC01 INCLUDE MACINC //PS020 EXEC PGM=pgmtest_environ /\INC02 INCLUDE MACINC
[ 結果 ]
//PROC01 PROC //PS010 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=* //PS020 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=*
6. NOP文
NOP文は、何の動作も行わないことを表します。ただし、NOP文の名前はSKIP文とIF文の分岐先として使用されることがあります。
-
構文
/\[名前]△¹NOP△¹[コメント]
項目 説明 名前
名前を記述する位置であり、「/\」に続く3桁目から8文字以内の記号名称で記述します。名前は省略できます。
NOP
オペレーションを記述する位置であり、名前の後ろに1つ以上の空白を入れて「NOP」と記述します。名前を省略した場合は、「/\」の後ろに1つ以上の空白を入れて記述します。
コメント
NOPの後ろに1つ以上の空白を入れて記述します。コメントは71桁目まで記述できます。
-
例
/\S1 NOP
7. PEXIT文
マクロ展開のフローをPEXIT文までのみ実行し、PEXIT文の以降からは無視します。
-
構文
/\[名前]△¹PEXIT△¹[コメント]
項目 説明 名前
名前を記述する位置であり、「/\」に続く3桁目から8文字以内の記号名称で記述します。名前は省略できます。
PEXIT
オペレーションを記述する位置であり、名前の後ろに1つ以上の空白を入れて「PEXIT」と記述します。名前を省略した場合は、「/\」の後ろに1つ以上の空白を入れて記述します。
コメント
PEXITの後ろに1つ以上の空白を入れて記述します。コメントは71桁目まで記述できます。
-
例
以下は、PEXIT文を使用した例です。
//********************************************************* //* MACRO PEXIT (MACPEXIT) //********************************************************* //PROC01 PROC //PS010 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=* /\PEXIT01 PEXIT //PS020 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=*
上記のようにマクロが定義されたプロシージャ(MACPEXIT)を呼び出して展開された結果は以下のとおりです。
//MAC JOB JOB1,CLASS=A,MSGCLASS=X //STEP1 EXEC MACPEXIT
[ 結果 ]
//MAC JOB JOB1,CLASS=A,MSGCLASS=X //PS010 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=*
8. SET文
内部パラメータの値を変更します。
-
構文
/\[名前]△¹SET△¹パラメータ名1={値|\パラメータ名2}△¹[コメント]
項目 説明 名前
名前を記述する位置であり、「/\」に続く3桁目から8文字以内の記号名称で記述します。名前は省略できます。
SET
オペレーションを記述する位置であり、名前の後ろに1つ以上の空白を入れて「SET」と記述します。名前を省略した場合は、「/\」の後ろに1つ以上の空白を入れて記述します。
パラメータ名1
変更するパラメータ名を記述します。
値
パラメータの値を指定された値に変更します。引用符付き文字列で指定します。
パラメータ名2
パラメータを指定された名前に変更します。
コメント
定数またはパラメータ名2の後ろに1つ以上の空白を入れて記述します。コメントは71桁目まで記述できます。
-
例
以下は、内部パラメータの値を変更する場合の例です。
//********************************************************* //* MACRO SET (MACSET) //********************************************************* //PROC01 PROC /\SET01 SET PROGRAM=pgmtest_environ //PS010 EXEC PGM=&PROGRAM //SYSOUT DD SYSOUT=*
上記のようにマクロが定義されたプロシージャ(MACSET)を呼び出すと、PGMの&PROGRAMがpgmtest_environに置き換えられます。
//MAC JOB JOB1,CLASS=A,MSGCLASS=X //STEP1 EXEC MACSET
9. SKIP文
マクロ展開のフローを、SKIP文に記述された名前を有する構文(ジョブ制御文またはマクロ制御文)へ移動します。すなわち、SKIP文以降から指定された構文以前までのマクロ定義本体を無視します。
-
構文
/\[名前]△¹SKIP△¹分岐先△¹[コメント]
項目 説明 名前
名前を記述する位置であり、「/\」に続く3桁目から8文字以内の記号名称で記述します。名前は省略できます。
SKIP
オペレーションを記述する位置であり、名前の後ろに1つ以上の空白を入れて「SKIP」と記述します。名前を省略した場合は、「/\」の後ろに1つ以上の空白を入れて記述します。
分岐先
SKIPの後ろに1つ以上の空白を入れて分岐先を記述します。
以下は、分岐先についての説明です。分岐先を記述する位置には名前を記述することができます。
-
名前: 移動先(ジョブ制御文またはマクロ制御文)の名前です。
コメント
分岐先の次に1つ以上の空白を入れて記述します。コメントは71桁目まで記述できます。
-
-
例
以下は、分岐先の項目の中で名前を設定する例です。
//********************************************************* //* MACRO SKIP (MACSKIP) //********************************************************* //PROC01 PROC /\SKIP01 SKIP LABEL01 //PS010 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=* /\LABEL01 NOP //PS020 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=*
上記のようにマクロが定義されたプロシージャ(MACSKIP)を呼び出して展開された結果は以下のとおりです。
//MAC JOB JOB1,CLASS=A,MSGCLASS=X //STEP1 EXEC MACSKIP,PASS=YES
[ 結果 ]
//MAC JOB JOB1,CLASS=A,MSGCLASS=X //PS020 EXEC PGM=pgmtest_environ //SYSOUT DD SYSOUT=*