多くのプログラミング言語やスクリプト言語では、文字列をクォーテーション(’)やダブル・クォーテーション(”)記号で囲んで記述することができます。そのため、変数の内容が特定の文字列である場合、その変数内容を別の内容で置き換えたい、といった場合に次のようなコーディングが浮かびます。
1 2 |
IF &LEVEL = '*' THEN SET &LEVEL = '&SYSUID' IF &LEVEL = '' THEN SET &LEVEL = '&SYSUID' |
しかし、CLISTではこのような記述ではエラーになってしまいます。CLISTでは、*などの算術演算用の文字はそのままでは文字として使用できません。また、”は文字列を示すのではなく単に”という文字(2つのクォーテーション記号)として処理されます。SET &LEVEL = ‘&SYSUID’は、変数LEVELにはクォーテーション記号自身も値として代入されてしまいます。
CLISTでは文字列のリテラルを’記号などで囲むのではなく&STR変数で記述する必要があります。算術演算用の文字でなければ括弧()記号で囲むこともできます。
1 2 3 4 5 |
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変数を使わずに直接式の中に書いてもいいのですが、この場合でも’記号では囲みません。
1 2 |
IF &LEVEL = ABC THEN SET &LEVEL = &SYSUID IF &LEVEL = 123 THEN SET &LEVEL = &SYSUID |
VBスクリプトやJava、C言語などを使っていた人であれば、文字列の値はクォーテーション(’)やダブル・クォーテーション(”)記号で囲むことが自然になっているので戸惑うかも知れません。
1 2 3 4 5 6 7 8 9 |
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を実行する際、空白を含んだ文字列をパラメーターとして渡す場合にはクォーテーション記号で囲むことになるので、ちょっと納得できない仕様でもあるのですが慣れるしかありません。