04.CLIST入門④

変数を使う

他のスクリプト言語同様にCLISTでも変数を扱うことができます。変数を使うことで、同じコマンドをパラメーターを変えて反復したり、端末との会話によってパラメーターを生成したりするような処理が容易にコーディングできるようになります。

記号変数と制御変数

記号変数はCLIST内で使用する任意の名前の変数です。パラメーターの受け渡しや中間の計算結果や処理結果などを保存することができます。

この例では「LVL」「OPT」が変数です。LVLとOPTは変数名で、&LVLと&OPTは変数の値を示します。SETステートメントは変数に値を設定します。この例では変数LVLに値USR1を、変数OPTに値VOLUMEをセットしています。設定された変数を実際に使っているのが2行目のLISTCATです。変数を展開すると「LISTCAT LEVEL(USR1) VOLUME」となります。
CLISTでは記号変数の明示的な宣言はありません。必要になった時点でコーディングして使用できます。記号変数の初期値はヌルです。必要に応じてSETステートメントで初期値などを設定します。

最初のSETステートメントは変数CTRに初期値1を設定し、2番目のSETステートメントは変数CTRの現在の値に1を加算するものです。
CLISTでは変数の型というのもあまり意識しません。文字を入れれば文字変数ですし、数字なら計算可能な数値変数となります。なお、文字を設定した変数に加減乗除などの演算を行うことはできません。実行時にエラーとなります。

SETステートメントではカンマや空白などもそのまま記述すれば値として代入できます。しかし先行ブランクや後続ブランクはカットされてしまいます。この例ではCHR2もCHR3も同じ値「AB DE」の5文字が設定されます。

文字列の前後に空白を含めたい場合は&STR関数を使用します。この例では変数CHR4には「 AB DE 」の8文字が設定されます。ABの前の2つの空白とDEの後ろの1つの空白も文字としてそのまま設定されます。

制御変数は予め用意されているシステム変数です。システム変数を活用すれば1つのCLISTを複数のMVSシステムで共用したり、ユーザーによって異なる処理を行うなどが容易になります。また&LASTCCはCLIST内で実行したTSOコマンドなどが正しく終了したかを判定するために使われる、よく知られた制御変数の1つです。なお多くの制御変数は読み出し専用ですが、&LASTCCや&MAXCCなど一部の制御変数はSETステートメントで値を変更することが可能です。

パラメーターの受け取り

CLISTを実行する際に指定したパラメーターも記号変数を介して受け取ります。

これはキーワードパラメーターの受け取り例です。太字の箇所がパラメーターの受け取りに関する部分です。PROCステートメントでキーワードとその初期値を設定します。キーワードはそのまま記号変数になります。この例では省略値として変数LEVELにユーザーID、変数OPTにNAMEを設定しています。
このCLISTを実行する場合「clist名 LEVEL(USR1) OPT(VOLUME)」と入力すれば、キーワードLEVELにUSR1、キーワードOPTにVOLUMEが入り、CLIST側ではそれぞれ&LEVELと&OPTでその値を参照することができます。