05.CLIST入門⑤

文字列の処理

CLISTでは文字列の取り扱いが多くなります。反復するTSOコマンドのパラメーターを生成したり、入力データや読み込んだレコード内に含まれている特定の文字列を探索したり、などです。
CLISTにはいくつかの文字列処理用の関数が用意されています。

&LENGTH:文字列の長さを得る

&LENGTHによって、変数内の文字列の長さを求めることができます。文字列の長さ分、処理を繰り返すような場合に利用できます。

&SYSINDEX:文字列内の検索

&SYSINDEXは、ある文字ストリングが他の文字ストリングの中のどこで始まっているかの位置を知らせます。これはマニュアルの説明のままですが、要するに文字列内にある特定の文字列をさがして、それが文字列内のどこから始まっているかを教えてくれます。変数Aに「REDBLUEYELLOW」というデータが入っているとき、その中にBLUEという文字列があるなら、その開始位置を求めたい、といった場合に利用します。

探索した文字列が見つからない場合、関数&SYSINDEXは0を返します。先頭で見つかると1が返ります(1桁目で見つかった)。

探索開始位置を先頭ではなく途中からにしたい場合は、開始位置を即値か変数で次のように3番目のパラメーターとして指定します。

&SYSINDEXでは、探索される文字列と探索する文字列のいずれにもDBCS文字を使用することができます。「赤青黄色」の中から「青」を探すと結果として2が返ります。つまり2文字目ということです。バイト位置では3桁目となるのでしょうが、DBCSが含まれると文字列のバイト数とはずれてきます。また実際のバイト列の中にはSO/SIコードも含まれます。文字として何文字目に見つかったかが返ることを知っておきます。DBCSとSBCSの混合文字列も処理できます。詳細はマニュアルに解説されています。

&SUBSTR:文字列の一部を取り出す

&SUBSTRによって、文字列の中の一部分を取り出すことができます。&SYSINDEXとの組み合わせで使われることも多く、特定の文字列を探し、見つかったらその部分を取り出して別の変数に移す、といった場合に利用できます。

次は少し実践的なサンプルで、RACFのLISTUSERコマンドで返されるリストから、ユーザーIDに登録された名前を取り出すものです。

&SUBSTRも漢字を含むDBCS文字列の処理も可能ですが、DBCSの場合は&SUBSTRに代えて&SYSCSUBSTRが利用できます。&SYSCSUBSTRはDBCSを1文字として計算します。詳細はマニュアルに解説されています。

&NRSTR:二重アンパーサンドの処理

&&のように&記号を2つ続けて文字列として変数内に格納したい場合があります。例えばJCLで使用する一時的データセット名などを生成したい場合です。この場合は&STRに代えて&NRSTR関数を利用できます。

他にも、&DATATYPE(変数内のデータタイプの判定)、&SYSCAPSと&SYSLC(大文字・小文字変換)、&SYSONEBYTEと&SYSTWOBYTE(全角・半角変換)などがあります。

Print Friendly, PDF & Email