1. 条件式
条件式は、真の値の判別に応じてプログラムで選択的に実行ロジックを変更できるようにします。条件式は、EVALUATE、IF、PERFORM、およびSEARCHステートメントに使用することができます。
条件式は、以下の2つに分けられます。
-
単純条件
-
複合条件
1.1. 単純条件
単純条件は、真または偽の値を持ちます。
単純条件には、以下の5種類があります。
-
クラス条件
-
条件名条件
-
比較条件
比較条件は、2つのオペランドを比較します。比較は、以下のように定義されます。
-
2つの英字クラス・オペランド
-
2つの英数字クラス・オペランド
-
2つのDBCSクラス・オペランド
-
2つの数字クラス・オペランド
-
英字クラスのオペランドと英数字クラスのオペランド
-
数字整数のオペランドと英数字クラスのオペランド
-
指標または指標データ項目の比較
-
2つのデータ・ポインター・オペランド
-
2つのプロシージャ・ポインター・オペランド
-
2つの関数ポインター・オペランド
-
英数字グループとDISPLAYまたはDISPLAY-1の使用方法を持つオペランド
比較条件には、以下の2つの形式があります。
-
一般比較条件
-
データ・ポインターの比較条件
-
-
符号条件
-
スイッチ状態条件
クラス条件
データ項目の内容が英字(alphabetic)、小文字の英字(alphabetic-lower)、大文字の英字(alphabetic-upper)、数字(numeric)、DBCS、漢字(KANJI)であるか、または環境部のSPECIAL-NAMES段落で定義されているCLASS節に指定された文字が含まれるかを判別します。

-
identifier-1
-
以下に記述されたUSAGEを持つデータ項目を参照してください。
-
NUMERICが指定された場合 : DISPLAY、COMPUTATIONAL-3、PACKED-DECIMAL
-
DBCSが指定された場合 : DISPLAY-1
-
ALPHABETIC、ALPHABETIC-UPPERまたはALPHABETIC-LOWERが指定された場合 : DISPLAY
-
クラス名が指定された場合 : DISPLAY
-
-
identifier-1が関数識別子である場合は、必ず英数字関数を参照してください。
-
以下のいずれかを設定します。
項目 説明 NOT
真の値を逆にします。
たとえば、NOT NUMERICは、NUMERICクラスの条件が偽であれば、結果が真となります。
NUMERIC
identifier-1が0から9の数字で構成されます。
ALPHABETIC
identifier-1は、大文字と小文字を区別しないアルファベットのAからZと、空白文字で構成されます。
ALPHABETIC-LOWER
identifier-1は、小文字のアルファベットaからzと、空白文字で構成されます。
ALPHABETIC-UPPER
identifier-1は、大文字のアルファベットAからZと、空白文字で構成されます。
class-name
identifier-1は、SPECIAL-NAMES段落内のクラス名に定義された文字で構成されています。
DBCS
identifier-1は、DBCS文字で構成されます。
-
以下の表は、使用可能なデータ項目のタイプとクラス条件の関係を示します。
identifier-1が示すデータ項目のタイプ | クラス条件の有効な形式 | |
---|---|---|
英字 |
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 |
DBCS |
DBCS |
NOT DBCS |
数字 |
NUMERIC クラス名 |
NOT NUMERIC NOTクラス名 |
条件名条件
条件名は、条件変数をチェックして、その値が関連付けられた条件名のどの値と等しいかを判別します。

項目 | 説明 |
---|---|
condition-name-1 |
比較条件を簡単に用いるときに使用されます。条件変数と条件名の値を比較するときの規則は、比較条件の規則に従います。 条件名1が範囲を有する値の場合、条件変数はその値が範囲内にあるかどうかをチェックします。条件変数の値が条件名の値のいずれかに等しいとき、結果は真となります。 |
以下の例は、条件変数と条件名の使用方法を示しています。
01 AGE-GROUP PIC 99. 88 INFANT VALUE 0. 88 BABY VALUE 1, 2. 88 CHILD VALUE 3 THRU 12. 88 TEENAGER VALUE 13 THRU 19.
AGE-GROUPは条件変数であり、INFANT、BABY、CHILDとTEENAGERは条件名です。
以下のIFステートメントは、AGE-GROUPの値をベースにして年齢グループを決定します。
IF INFANT... (Tests for value 0) IF BABY... (Tests for values 1, 2) IF CHILD... (Tests for values 3 through 12) IF TEENAGER... (Tests for values 13 through 19)
一般比較条件
一般比較条件は、2つのオペランドを比較します。オペランドは、識別子、リテラル、算術式、または指標名のいずれかになります。

項目 | 説明 |
---|---|
オペランド1 |
比較条件のサブジェクトです。識別子、リテラル、算術式、または指標名のいずれかになります。 |
オペランド2 |
比較条件のオブジェクトです。識別子、リテラル、関数識別子、算術式、または指標名のいずれかになります。 |
一般比較条件で、データ項目、リテラル、表意定数は、以下の比較形式に従って比較されます。
比較形式 | 説明 |
---|---|
英数字 |
2つのオペランドの英数字文字を比較 |
DBCS |
2つのオペランドのDBCS文字を比較 |
数字 |
2つのオペランドの代数値を比較 |
グループ |
一方が英数字グループ項目の場合、2つのオペランドの英数字文字を比較 |
(Int) |
整数項目のみ比較(Alph、Num、グループの比較と結合) |
ブラック |
比較できない |
以下の表は、異なるオペランド・タイプの比較可能なペアを示します。
データ項目またはリテラルのタイプ | 英数字グループ項目 | 英字項目と英数字項目 | ゾーン10進数項目 | ネイティブ数字項目 | 英数字浮動小数点項目 | DBCS項目 |
---|---|---|---|---|---|---|
英数字グループ項目 |
グループ |
グループ |
グループ(Int) |
グループ |
グループ |
|
英字データ項目 |
グループ |
Alph |
Alph(Int) |
Alph |
||
英数字項目:
|
グループ |
Alph |
Alph(Int) |
Alph |
||
英数字リテラル |
グループ |
Alph |
Alph(Int) |
Alph |
||
数字リテラル |
グループ(Int) |
Alph(Int) |
Num |
Num |
Num |
|
ゾーン10進数データ項目 |
グループ(Int) |
Alph(Int) |
Num |
Num |
Num |
|
ネイティブ数字項目
数字組み込み関数と 整数組み込み関数 |
Num |
Num |
Num |
|||
Display浮動小数点項目 |
グループ |
Alph |
Num |
Num |
Num |
|
浮動小数点項目 |
Num |
Num |
Num |
|||
DBCSデータ項目 |
グループ |
DBCS |
||||
DBCSリテラル |
グループ |
DBCS |
表意定数 | 英数字グループ項目 | 英字項目と英数字項目 | ゾーン10進数項目 | ネイティブ数字項目 | 英数字浮動小数点項目 | DBCS項目 |
---|---|---|---|---|---|---|
ZERO |
グループ |
Alph |
Num |
Num |
Num |
|
SPACE |
グループ |
Alph |
Alph(Int) |
Alph |
DBCS |
|
HIGH-VALUE, LOW-VALUE QUOTE |
グループ |
Alph |
Alph(Int) |
Alph |
||
シンボリック文字 |
グループ |
Alph |
Alph(Int) |
Alph |
||
ALL英数字リテラル |
グループ |
Alph |
Alph(Int) |
Alph |
||
ALL DBCSリテラル |
グループ |
DBCS |
-
英数字の比較
-
2つのオペランドの1バイト文字を比較します。比較は、照合シーケンスに定義された順序どおり実行されます。
-
2つのオペランドのいずれかが英数字でも英字でもない場合、以下のように実行されます。
-
ゾーン10進数のオペランドは同じサイズのゾーン10進数の英数字項目として扱われます。
-
display浮動小数点項目は、数値ではなく英数字項目として扱われます。
-
-
2つのオペランドのサイズが等しい場合、左端の文字から右端の文字まで比較し、初めて異なる文字が検出されたとき、その文字の照合シーケンスを比較して優先順位を決めます。
-
2つのオペランドのサイズが等しくない場合、短い方のオペランドが長い方のオペランドのサイズほど空白で拡張され、比較が行われます。
-
-
DBCSの比較
英数字比較の規則と同様です。2進照合シーケンスを使用します。
-
数字の比較
2つのオペランドの代数を比較します。
-
グループの比較
2つのオペランドの英数字比較を実行します。英数字の基本データ項目の比較と同様に処理されます。
-
指標の比較
2つの指標項目の比較は、指標項目に含まれているオカレンス番号の比較です。指標をデータ項目またはリテラルと比較する場合、オカレンス番号とデータまたはリテラルの値を比較することになります。
データ・ポインターの比較条件
ポインター・データ項目に対しては、等しいか否かについてのみ比較できます。ポインター・データ項目は、USAGE POINTERとして定義されたデータ項目であるか、ADDRESS OF特殊レジスターです。
比較条件であるIF、PERFORM、EVALUATEは、SEARCH(形式1)ステートメントに使用できます。SEARCH形式2(SEARCH ALL)には使用できません。

項目 | 説明 |
---|---|
identifier-1、identifier-3 |
レベル66とレベル88を除いて、いかなるデータ項目も使用できます。 |
identifier-2、identifier-4 |
USAGE POINTERとして定義されたデータ項目です。 |
NULL、NULLS |
NULLポインターです。 |
プロシージャ・ポインターと関数ポインターの比較条件
等しいか否がについてのみ比較できます。

項目 | 説明 |
---|---|
identifier-1、identifier-3 |
USAGE PROCEDURE-POINTERまたはFUNCTION-POINTERである必要があります。 |
NULL、NULLS |
NULLポインターです。 |
符号条件
符号条件は、数字オペランドの値が0より大きいか、小さいか、等しいかを判別します。

項目 | 説明 |
---|---|
operand-1 |
数字識別子または算術式である必要があります。 0より大きければPOSITIVE、0より小さければNEGATIVE、0に等しければZEROとなります。 符号なしオペランドは、POSITIVEまたはZEROのいずれかです。 |
NOT |
真・偽の判別を逆にします。たとえば、NOT ZEROはオペランドが0でない正または負の値である場合、真となります。 |
スイッチ状態条件
スイッチ状態条件は、UPSIスイッチのオン/オフ状態を定義します。UPSIスイッチの値によって結果が決まります。

項目 | 説明 |
---|---|
condition-name |
特殊名段落に定義されたUPSIスイッチです。 |
1.2. 複合条件
複合条件は、論理演算子を使用した単純条件、組合せ条件の結合、または論理否定を使用した条件の否定などで作成されます。それぞれの論理演算子は、前後に空白文字が必要です。
括弧を使用しない場合、以下の順で優先順位が決まります。
-
算術演算子
-
単純条件
-
NOT
-
AND
-
OR
複合条件の真の値は、個々の単純条件の真の値と論理演算子との相互関係に応じて判別されます。複合条件は、以下のいずれかにすることができます。
-
単純否定条件
-
組合せ条件(否定条件も可能)
単純否定条件
単純条件は、論理演算子NOTを使用して真・偽の値を否定することができます。

項目 | 説明 |
---|---|
conditions-1 |
conditions-1の真・偽の判別を反対にします。 conditions-1の値が真であれば、結果は偽となり、conditions-1の値が偽であれば、結果は真となります。 |
condition-1が括弧で囲まれていても結果は同じです。たとえば、以下の2つのステートメントは同じです。
NOT A IS EQUAL TO B NOT ( A IS EQUAL TO B )
組合せ条件
2つ以上の条件が論理演算子により結合され、組合せ条件を作成します。

以下の条件が、condition-1またはcondition-2に位置することができます。
-
単純条件
-
単純否定条件
-
組合せ条件
-
複合否定条件(論理演算子NOTの後ろに括弧で囲まれた組合せ条件が続く場合)
以下の表は、論理演算子と条件C1、C2の関係です。
Value for C1 | Value for C2 | C1 AND C2 | C1 OR C2 | NOT (C1 AND C2) | NOT C1 AND C2 | NOT (C1 OR C2) | NOT C1 OR C2 |
---|---|---|---|---|---|---|---|
真 |
真 |
真 |
真 |
偽 |
偽 |
偽 |
真 |
偽 |
真 |
偽 |
真 |
真 |
真 |
偽 |
真 |
真 |
偽 |
偽 |
真 |
真 |
偽 |
偽 |
偽 |
偽 |
偽 |
偽 |
偽 |
真 |
偽 |
真 |
真 |
略記組合せ比較条件
比較条件が連続して記述された場合、最初の比較条件を除いて以降の比較条件を、以下の2つの方法のいずれかに省略することができます。
-
サブジェクトの省略
-
サブジェクトと比較演算子の省略

関連のある比較条件の中で、2つの省略形にすることができます。略記条件は、以下のように判別されます。
-
最後に記述されているサブジェクトが省略されたサブジェクトです。
-
最後に記述されている比較演算子が省略された比較演算子です。
以下の表は、省略された条件の例です。
略記組合せ比較条件 | 省略されていない表現 |
---|---|
A = B AND NOT < C OR D |
((A = B) AND (A NOT < C)) OR (A NOT < D) |
A NOT > B OR C |
(A NOT > B) OR (A NOT > C) |
NOT A = B OR C |
(NOT (A = B)) OR (A = C) |
NOT (A = B OR < C) |
NOT ((A = B) OR (A < C)) |
NOT (A NOT = B AND C AND NOT D) |
NOT ((((A NOT = B) AND (A NOT = C)) AND (NOT (A NOT = D)))) |