記号や空白を含む文字列の記述(CLIST)

By 神居 - Posted: 2012/04/30 Last updated: 2012/04/30 - Leave a Comment

多くのプログラミング言語やスクリプト言語では、文字列をクォーテーション(’)やダブル・クォーテーション(”)記号で囲んで記述することができます。
そのため、変数の内容が特定の文字列である場合、その変数内容を別の内容で置き換えたい、といった場合に次のようなコーディングが浮かびます。

IF &LEVEL = '*' THEN SET &LEVEL = '&SYSUID'
IF &LEVEL = '' THEN SET &LEVEL = '&SYSUID'

しかし、CLISTではこのような記述ではエラーになってしまいます。CLISTでは、* などの算術演算用の文字はそのままでは文字として使用できません。また、”は文字列を示すのではなく単に”という文字(2つのクォーテーション記号)として処理されます。SET &LEVEL = ‘&SYSUID’は、変数LEVELにはクォーテーション記号自身も値として代入されてしまいます。
CLISTでは文字列のリテラルを’記号などで囲むのではなく&STR変数で記述する必要があります。算術演算用の文字でなければ括弧()記号で囲むこともできます。

IF &STR(&LEVEL) = &STR(*) THEN SET &LEVEL = &STR(&SYSUID) 文字列に算術記号が含まれる時
IF &STR(&LEVEL) = &STR() THEN SET &LEVEL = &STR(&SYSUID)  文字列がヌルの時

IF &LEVEL = (A B) THEN SET &LEVEL = &SYSUID               文字列に空白が含まれる時
IF &LEVEL = () THEN SET &LEVEL = &SYSUID                  文字列がヌルの時

アルファベットや数字だけで構成される場合は、&STR変数を使わずに直接式の中に書いてもいいのですが、この場合でも’記号では囲みません。

IF &LEVEL = ABC THEN SET &LEVEL = &SYSUID
IF &LEVEL = 123 THEN SET &LEVEL = &SYSUID

VBスクリプトやJava、C言語などを使っていた人であれば、文字列の値はクォーテーション(’)やダブル・クォーテーション(”)記号で囲むことが自然になっているので戸惑うかも知れません。

CLIST10 LEVEL('A B')       実行する時はクォーテーション記号で囲むが...

PROC 0 &LEVEL() &OPTION()
CONTROL MSG
WRITE &LEVEL &OPTION
IF &LEVEL = (A B) THEN SET &LEVEL = &SYSUID   参照時は()記号で囲むか&STR変数で参照する
WRITE &LEVEL &OPTION
LISTC LEVEL(&LEVEL) &OPTION
END

EXECコマンドでCLISTを実行する際、空白を含んだ文字列をパラメーターとして渡す場合には、クォーテーション記号で囲むことになるので、ちょっと納得できない仕様でもあるのですが、慣れるしかありません。

Posted in CLIST(コマンドプロシージャ)とISPFダイアログ • • Top Of Page