ILE COBOL 解説書

単純条件

次の 5 つの単純条件があります。

単純条件は、真か偽のいずれかの真理値をとります。

クラス条件

クラス条件は、データ項目の内容が英字、英小文字、英大文字、数字であるか、 あるいは環境部の SPECIAL NAMES 段落で定義されているように CLASS 文節によって指定された一連の文字の中の文字だけを含んでいるのかを識別します。

クラス条件 - 形式
 
>>-ID--+----+--+-----+--+-NUMERIC----------+-------------------><
       '-IS-'  '-NOT-'  +-ALPHABETIC-------+
                        +-ALPHABETIC-LOWER-+
                        +-ALPHABETIC-UPPER-+
                        |      (1)         |
                        +-DBCS-------------+
                        |       (1)        |
                        +-KANJI------------+
                        '-クラス名---------'
 
 

注:

  1. IBM 拡張

ID
使用法が DISPLAY であるデータ項目を参照する必要があります。 ID が長さゼロのグループ項目であり、さらにそれがクラス条件で指定されていないと、結果は常に真となります。 NOT が指定されていなければ、結果は常に偽となります。

ID が関数 ID である場合は、その参照対象は英数字、DBCS、または 日時の関数でなければなりません。

NOT
これが使用された場合、NOT および次のキーワードは真理値によって実行されるクラス・テストを定義します。 たとえば、NOT NUMERIC は、データ項目が非数字かどうかを判別する真偽テストです。
NUMERIC
このデータ項目は全体として 0 〜 9 の文字で構成されており、演 算符号は含まれていることもいないこともあります。

テストされる項目の PICTURE に演算符号が含まれていないなら、内容 が数字で演算符号が存在しない場合にだけ、その項目は数字であると判別されます。

テストされる項目の PICTURE に演算符号が含まれているときは、その項目が基本項目であり、 内容が数字で、しかも有効な演算符号が存在する場合にだけ、その項目は数字であると判別されます。

EBCDIC 文字セットにおいて有効な正の組み込み演算符号は、16 進数の F、C、E、A です。 また、負の符号は 16 進数の D と B です。 なお、推奨する正の符号は 16 進数の F、負の符号は 16 進数の D となっています。 SIGN IS SEPARATE 文節に記述される項目の場合、有効な演算符号は + (16 進 4E) と - (16 進 60) です。

+----------------------------------IBM 拡張----------------------------------+

数字および日時のデータ項目の場合、テストされている ID は、USAGE DISPLAY、USAGE PACKED-DECIMAL、USAGE COMP、または USAGE COMP-3 として明示的あるいは暗黙に記述できます。

+------------------------------End of IBM 拡張-------------------------------+

ALPHABETIC
ID が参照するデータ項目は、A 〜 Z の大小の英文字とスペースの組み合わせで全体が構成されます。
ALPHABETIC-LOWER
ID が参照するデータ項目は、a 〜 z の英小文字とスペースの組み合わせで全体が構成されます。
ALPHABETIC-UPPER
ID が参照するデータ項目は、A 〜 Z の英大文字とスペースの組み合わせで全体が構成されます。
クラス名
ID が参照するデータ項目は、SPECIAL-NAMES 段落のクラス名の定義に列挙される文字で全体が構成されます。

クラス名テストは、数字として記述された ID に使用してはなりません。

+----------------------------------IBM 拡張----------------------------------+

DBCS
ID は、以下の規則に従って DBCS 文字で全体が構成されます。
KANJI
ID は、以下の規則に従って DBCS 文字で全体が構成されます。

+------------------------------End of IBM 拡張-------------------------------+

クラス・テストは、使用法が INDEX、POINTER、PROCEDURE-POINTER のいずれかである項目では有効ではありません。 これらの項目はどのクラスやカテゴリーにも属さないからです。

+----------------------------------IBM 拡張----------------------------------+

クラス条件は、外部の浮動小数点項目 (USAGE DISPLAY) または内部浮動小数点項目 (USAGE COMP-1 および USAGE COMP-2) には使用できません。

+------------------------------End of IBM 拡張-------------------------------+

表 20 に、クラス・テストの有効な形式を示します。

表 20. クラス・テストの有効な形式

ID のタイプ クラス・テストの有効な形式
英字
ALPHABETIC
ALPHABETIC-LOWER
ALPHABETIC-UPPER
クラス名
NOT ALPHABETIC
NOT ALPHABETIC-LOWER
NOT ALPHABETIC-UPPER
NOT クラス名
英数字、
英数字編集、
または数字編集
ALPHABETIC
ALPHABETIC-LOWER
ALPHABETIC-UPPER
NUMERIC
クラス名
NOT ALPHABETIC
NOT ALPHABETIC-LOWER
NOT ALPHABETIC-UPPER
NOT NUMERIC
NOT クラス名
外部 10 進数
内部 10 進数
NUMERIC
NOT NUMERIC

+----------------------------------IBM 拡張----------------------------------+


DBCS
DBCS 編集

+------------------------------End of IBM 拡張-------------------------------+

 
 
DBCS
KANJI
 
 
NOT DBCS
NOT KANJI

+----------------------------------IBM 拡張----------------------------------+


日時

+------------------------------End of IBM 拡張-------------------------------+

 
 
NUMERIC
クラス名
 
 
NOT NUMERIC
NOT クラス名

条件名条件

条件名条件は、条件変数をテストして、条件変数の値が条件名に関連した任意の値に等しいかを判別します。

条件名条件 - 形式
 
>>-条件名------------------------------------------------------><
 
 

条件名は、比較条件のための略語として条件の中に使用されます。 条件変数と条件名の値を比較する際の規則は、比較条件に関して示されている規則と同じです。

条件名が値の範囲 (またはいくつかの範囲) に結び付けられている場合、条件変数は、その値が範囲内 (両端の値も含めて) に入っているかどうかがテストされます。 このテストの結果が真となるのは、条件名に対応する値の 1 つが、関連する条件変数の値に等しい場合です。

+----------------------------------IBM 拡張----------------------------------+

条件名には、浮動小数点値および DBCS 値が使用できます。

+------------------------------End of IBM 拡張-------------------------------+

次の例は、条件変数および条件名の使用を図示しています。

01  NUMBER               PIC  99.
    88  FIVE             VALUE 5.
    88  ONE-DIGIT-EVEN   VALUE 0, 2, 4, 6, 8
    88  TWO-DIGIT-NUMBER VALUE 10 THRU 99

NUMBER は条件変数であり、FIVE、ONE-DIGIT-EVEN、TWO-DIGIT-NUMBER は条件名です。

次の IF ステートメントは、上記の例に追加して、特定のレコードの年齢グループを判別できます。

IF FIVE...             (値 5 のテスト)
IF ONE-DIGIT-EVEN      (値 0, 2, 4, 6, 8 のテスト)
IF TWO-DIGIT-NUMBER    (値 10 〜 99 のテスト)

この条件名条件のテスト結果によって、オブジェクト・プログラムがいずれかの実行代替パスに進みます。

比較条件

比較条件は 2 つのオペランドを比較し、どちらが ID、リテラル、算術式、指標名、または関数 ID にできるかを調べます。 比較条件は少なくとも 1 つの ID を参照しなければなりません。

比較条件 - 形式
 
>>-オペランド-1--+----+--+----------+--------------------------->
                 '-IS-'  |     (1)  |
                         '-NOT------'
 
>--+-+-GREATER--+------+-+---------------+--オペランド-2-------><
   | |          '-THAN-' |               |
   | +->-----------------+               |
   | +-LESS--+------+----+               |
   | |       '-THAN-'    |               |
   | +-<-----------------+               |
   | +-EQUAL--+----+-----+               |
   | |        '-TO-'     |               |
   | '-=-----------------'               |
   +-GREATER--+------+--OR EQUAL--+----+-+
   |          '-THAN-'            '-TO-' |
   +->=----------------------------------+
   +-LESS--+------+--OR EQUAL--+----+----+
   |       '-THAN-'            '-TO-'    |
   '-<=----------------------------------'
 
 

注:

  1. NOT GREATER THAN OR EQUAL TO、NOT >=、 NOT LESS THAN OR EQUAL TO、および NOT <= は IBM 拡張です。

オペランド-1
比較条件のサブジェクト。 ID、リテラル、関数 ID、算術式、または指標名です。
オペランド-2
比較条件のオブジェクト。 ID、リテラル、関数 ID、算術式、または指標名です。

関係演算子は、比較の種類を指定します。 各関係演算子の前後には、スペースが 1 つずつなければなりません。

関係演算子
次のように書ける

IS GREATER THAN
IS >

IS NOT GREATER THAN
IS NOT >

IS LESS THAN
IS <

IS NOT LESS THAN
IS NOT <

IS EQUAL TO
IS =

IS NOT EQUAL TO
IS NOT =

IS GREATER THAN OR EQUAL TO
IS >=

IS LESS THAN OR EQUAL TO
IS <=

+----------------------------------IBM 拡張----------------------------------+

IS NOT GREATER THAN OR EQUAL TO
IS NOT >=

IS NOT LESS THAN OR EQUAL TO
IS NOT <=

+------------------------------End of IBM 拡張-------------------------------+

関連情報

+----------------------------------IBM 拡張----------------------------------+

DBCS 項目

DBCS データ項目およびリテラルは、すべての関係演算子で使用できます。 比較 (2 つの DBCS 項目間のみ) は、DBCS 文字の 16 進数値の 2 進数照合順序に基づいています。 比較する 2 つの項目の長さが異なる場合、小さいほうの項目の右側に DBCS スペースが埋め込まれます。

+------------------------------End of IBM 拡張-------------------------------+

+----------------------------------IBM 拡張----------------------------------+

ポインター・データ項目

ポインター・データ項目は、USAGE IS POINTER として明示的に定義された項目です。 そのように定義されなければ、ADDRESS OF データ項目または ADDRESS OF 特殊レジスターであり、それらは暗黙に USAGE IS POINTER として定義されています。

ポインター・データ項目を指定すると、EQUAL および NOT EQUAL だけが関係演算子として使用できます。 比較において使用される 2 つのアドレスがどちらも同じ保管場所にある場合、オペランドは等しくなります。

この比較条件は、IF、PERFORM、EVALUATE、および SEARCH 形式 1 のステートメントの中で認められています。 SEARCH 形式 2 (SEARCH ALL) ステートメントでは認められていません。 それは、ポインター・データ項目に適用できる、意味のある配列がないからです。

ADDRESS 比較 - 形式
 
>>-+-ADDRESS OF--ID-1-+--+----+--+-----+--+-EQUAL--+----+-+----->
   +-ID-2-------------+  '-IS-'  '-NOT-'  |        '-TO-' |
   +-NULL-------------+                   '-=-------------'
   '-NULLS------------'
 
>--+-ADDRESS OF--ID-3-+----------------------------------------><
   +-ID-4-------------+
   +-NULL-------------+
   '-NULLS------------'
 
 
ID-1、ID-3
データ部セクションに定義されている任意のレベル項目 (レベル 66 と 88 を除く) を指定できます。
ID-2、ID-4
これは、USAGE IS POINTER として記述されていなければなりません。
NULL(S)
他のオペランドが以下のいずれかであるときだけ使用できます。

つまり、NULL=NULL は使用できません。

+------------------------------End of IBM 拡張-------------------------------+

+----------------------------------IBM 拡張----------------------------------+

プロシージャー・ポインター・データ項目

プロシージャー・ポインター・データ項目は、USAGE IS PROCEDURE-POINTER として明示的に定義されます。

プロシージャー・ポインター・データ項目を指定すると、EQUAL および NOT EQUAL だけが関係演算子として使用できます。 比較において使用される 2 つのアドレスがどちらも同じ保管場所にある場合、オペランドは等しくなります。

この比較条件は、IF、PERFORM、EVALUATE、および SEARCH 形式 1 のステートメントの中で認められています。 しかし、SEARCH 形式 2 (SEARCH ALL) ステートメントでは認められていません。 それは、プロシージャー・ポインター・データ項目に適用できる、意味のある配列がないからです。

プロシージャー・ポインター比較 - 形式
 
>>-+-ID-1--+--+----+--+-----+--+-EQUAL--+----+-+--+-ID-2--+----><
   +-NULL--+  '-IS-'  '-NOT-'  |        '-TO-' |  +-NULL--+
   '-NULLS-'                   '-=-------------'  '-NULLS-'
 
 
ID-1、ID-2
USAGE IS PROCEDURE-POINTER として記述する必要があります (詳しくは PROCEDURE-POINTER 句を参照)。
NULL(S)
他のオペランドが USAGE IS PROCEDURE-POINTER として定義されている場合に限り使用されます。 NULL=NULL は使用できません。

+------------------------------End of IBM 拡張-------------------------------+


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]