JCLでは、通常、シンボリックパラメーターは&(アンパサンド記号)の後に変数名を使用して作成されます。
ただし、データセット名では、変数名の後にドット記号を付ける必要があります。例:
//J&USER JOB 1
//MYSTEP EXEC PGM=MYPROG
//MYDATA DD DSN=&USER..MYCLASS.COOL
どうしてこんなことに?後で矛盾が怖いので、この質問をします。事前に助けてくれてありがとう。
簡単に言うと、シンボリック パラメータの後にピリオド (.) が続く場合は、さらにピリオド (.) を追加する必要があるため、ピリオドが 2 つ (.) になります。
シナリオに基づいて、2 つのピリオド (.) を使用する必要があるのは正しいことです。
この議論では、最初のピリオドは連結に使用されると述べましたが、他の人は、それがシンボリック変数の終了の一部であると述べました。しかし、それは本当に問題ではありません。2 番目のピリオドは、データセット名の一部になります。
&USERがUSR01として解決された場合、次のように解釈されます。
//JUSR01 JOB 1
//MYSTEP EXEC PGM=MYPROG
//MYDATA DD DSN=USR01.MYCLASS.COOL
データセットでは 2 番目の期間のみが使用されます。
しかし、もしあなたがこのようなものを持っているとしたら、どうなるか想像してみてください
//MYDATA DD DSN=&USER.MYCLASS.COOL
データセットはUSR01MYCLASS.COOLのようなものになります。各レベルは 8 文字を超えてはならないため、これはエラーです。
シンボリック パラメータの先頭がアンパサンド (&) でマークされているのと同じように。スペースまたはピリオドで終了できます。ピリオドで終わる場合、ピリオドは名前の一部ではありません (開始のアンパサンドが含まれないのと同様)。
文字列全体がシンボリック パラメータに置き換えられる場合、そのままコード化されます。
// SET MYPROG=FRED
//RUNIT EXEC PGM=&MYPROG
ここで&MYPROG
は、その値に置き換えられますFRED
。シンボリック名がどこで開始または終了したかを理解するのに問題はありません。FRED1
と の 3 つのプログラムを実行したいとしFRED2
ますFRED3
。次のようなことができます:
//RUN3 EXEC PGM=&MYPROG.3
ここでは、プログラムFRED3
が実行されています。ピリオドで終わる記号MYPROG
は に相当しFRED
、これに残りのテキストが追加されてFRED3
.
データセット名内でシンボリック パラメータを使用する場合も同じことが当てはまります。最初のピリオドはシンボル名を終了するために必要です。次のピリオドはデータセット名自体の一部です。たとえば、symbolが にUSER
評価される
ABC123
場合、
//MYDSN DD DSN=&USER..MYDATA
ABC123.MYDATA
データセット名として評価されます。同様に、
//MYDSN DD DSN=&USER.X.MYDATA
ABC123X.MYDATA
最初のピリオドは記号名を終了し、結果の一部ではないため、結果の DSN には単一のピリオドがあることに注意してください。