<<< 前へ   TOP   次へ>>>


判定式

判定式は次のような構文で使用します。

 判定式 ::= ( 論理式 [AND|OR 論理式 ...] )

論理式

 論理式 ::= [NOT] FALSE |
          TRUE |
          システム判定式 |
          比較式 |
          ユーザー定義関数(戻り値が論理値) |
          判定式

です。再帰定義になってますね:- 要は判定式そのものをANDかORでくっつけて使用できる、ってことです。
システム判定式は、SASFが提供している組込みの式です。具体的にはreferenceを参照して下さい。

 例)
   (EqNum(#i,0))
   (NOT #i>=10)
   (MatchText($w,$r) AND (#i<100))
   ( (IsDir($work) AND IsDir($newdir)) OR NOT UseUnlha() )
   ( NOT ( IsFile($file) AND CheckLZH($file) ) )
   (TRUE)

比較式

比較式とは、数字や文字列を直接==や<>などで比較したものです。
書式は以下の通りです。

 数字 比較演算子 数字
 文字列 比較演算子 文字列

比較演算子

==等しい
!=等しくない
<>等しくない
<左 < 右
<=左 <= 右
=<左 <= 右
>左 > 右
>=左 >= 右
=>左 >= 右

文字列の比較は常に大文字・小文字を区別します
また、比較演算子は演算子(+ - * / % & | ^)よりも優先順位は低いです。

注意 FALSE及びTRUEは、比較演算子が使えません

 例)
   IF (#a<=#b) THEN { ... };
   WHILE ($newsec<>'') DO { ... };
   REPEAT { ... } UNTIL (#Count!=10);
   IF (10<=#a+2) THEN { ... };

ANDとORの評価

SASFでは、ANDまたはORで連結された判定式をチェックする場合、途中で真偽が確定した場合は、以後の判定式の評価を行わずにスキップします。
ANDの場合、ANDの以前の判定式が疑になった場合、次の判定式は評価せずに、疑として判定します。
ORの場合、ORの以前の式が真になった場合、次の判定式は評価せずに、真として判定します。

 例)
   ( EqNum(#i,10) AND EqNum(#j,0) )
   #i <> 10の場合、疑になり、#j = 0の評価は行われません。
   #i = 10 の場合、続けて #j = 0 が評価されます。

 例)
   ( EqNum(#i,10) OR EqNum(#j,0) )
   #i = 10 の場合、真になり、#j=0 の評価は行われません。
   #i <> 10 の場合、続けて #j=0の評価を行います。

 例)
   ( EqNum(#i,10) AND EqNum(#j,0) OR EqNum(#k,90) )
   #i<>10の場合、疑になり、以後は評価されません。
   #i=10の場合、続けて#j=0を評価します。
   #j=0の場合、真になり、以後は評価されません。

 例)
   ( EqNum(#i,10) OR EqNum(#j,0) AND EqNum(#k,90) )
   #i=10の場合、真になり、以後は評価されません。
   #i<>10の場合、続けて#j=0を評価します。
   #j<>0の場合、疑になり、以後は評価されません。

<<< 前へ   TOP   次へ>>>