CASE文の構文は以下の2通りです。
CASE 数字0 OF {
数字[,数字 ...] : 複文
[, 数字[,数字 ...] : 複文]
...
[, ELSE : 複文]
}
STRCASE 文字列0 [AS STR|TEXT|REGSTR|REGTEXT|MASKSTR|MASKTEXT] OF {
文字列[,文字列...] : 複文
[, 文字列[,文字列...] : 複文]
...
[, ELSE : 複文]
}
「数字」とは-グローバル変数、ローカル変数、引数、定数、システム変数、計算式、ユーザー定義関数(戻り値が数値)-の7つのことです。
CASEで始まる文は、数字が対象となります。数字0と一致する数字が有った場合、続く複文を実行します。
例)
CASE #work OF {
0 : { ShowMessage('work-0','test',0); },
1,2,3 : { #val=3; },
#FOO,4*3 : { #oop=#ko; },
ELSE : { ShowMessage('done','test',0); }
};
「文字列」とは-グローバル文字列、ローカル文字列、引数、文字列定数、システム文字列、文字列式、ユーザー定義関数(戻り値が文字列)-の7つのことです。
STRCASEで始まる文は、文字列が対象となります。デフォルトでは大文字・小文字を区別します。ASにつづけてどのように文字列を比較するかを指定することもできます。
| STR | 大文字・小文字を区別して比較 |
| TEXT | 大文字・小文字を区別せずに比較 |
| REGSTR | 大文字・小文字を区別して、正規表現にマッチ |
| REGTEXT | 大文字・小文字を区別せずに、正規表現にマッチ |
| MASKSTR | 過去の互換性のために存在。全てにマッチしない |
| MASKTEXT | 過去の互換性のために存在。全てにマッチしない |
例)
STRCASE $trg OF { // AS STRと同じ
'EVERY','THING' : { #a=0; },
'BUT' : { #a=1; #b=1; },
'THE','GIRL' : { #a=2; },
ELSE : { #a=-1; }
};
STRCASE $trg AS REGTEXT OF {
'^MONKEY?' : { ShowMessage('猿','test',0); },
'SIM[PLY] RED$' : { #RED=1; },
'S[^ADE]+' : { #Sweetest=#taboo; }
};
!!!注意!!!
ver 2まではTEXT、REGTEXTを指定した場合に全角のAaを区別していましたが、ver 3以降からは区別しなくなりました。
従来通りの動作をさせたい場合は、UpperStrやLowerStrで半角のA-ZだけコンバートしてからSTRCASE AS STRやAS REGSTRで比較するようにして下さい。