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節に指定された文字が含まれるかを判別します。

figure pd class condition
Figure 1. クラス条件の形式
  • 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クラス名

条件名条件

条件名は、条件変数をチェックして、その値が関連付けられた条件名のどの値と等しいかを判別します。

figure pd condition name condition
Figure 2. 条件名の形式
項目 説明

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つのオペランドを比較します。オペランドは、識別子、リテラル、算術式、または指標名のいずれかになります。

figure pd general relation
Figure 3. 一般比較条件の形式
項目 説明

オペランド1

比較条件のサブジェクトです。識別子、リテラル、算術式、または指標名のいずれかになります。

オペランド2

比較条件のオブジェクトです。識別子、リテラル、関数識別子、算術式、または指標名のいずれかになります。

一般比較条件で、データ項目、リテラル、表意定数は、以下の比較形式に従って比較されます。

比較形式 説明

英数字

2つのオペランドの英数字文字を比較

DBCS

2つのオペランドのDBCS文字を比較

数字

2つのオペランドの代数値を比較

グループ

一方が英数字グループ項目の場合、2つのオペランドの英数字文字を比較

(Int)

整数項目のみ比較(Alph、Num、グループの比較と結合)

ブラック

比較できない

以下の表は、異なるオペランド・タイプの比較可能なペアを示します。

Table 1. データ項目およびリテラルを含む比較
データ項目またはリテラルのタイプ 英数字グループ項目 英字項目と英数字項目 ゾーン10進数項目 ネイティブ数字項目 英数字浮動小数点項目 DBCS項目

英数字グループ項目

グループ

グループ

グループ(Int)

グループ

グループ

英字データ項目

グループ

Alph

Alph(Int)

Alph

英数字項目:

  • データ項目のカテゴリ:

    • 英数字

    • 英数字編集

    • USAGE DISPLAYの数字編集

  • 英数字関数

グループ

Alph

Alph(Int)

Alph

英数字リテラル

グループ

Alph

Alph(Int)

Alph

数字リテラル

グループ(Int)

Alph(Int)

Num

Num

Num

ゾーン10進数データ項目

グループ(Int)

Alph(Int)

Num

Num

Num

ネイティブ数字項目

  • 2進数

  • 算術式

  • 内部10進数

  • 内部浮動小数点

数字組み込み関数と

整数組み込み関数

Num

Num

Num

Display浮動小数点項目

グループ

Alph

Num

Num

Num

浮動小数点項目

Num

Num

Num

DBCSデータ項目

グループ

DBCS

DBCSリテラル

グループ

DBCS

Table 2. 一般比較条件の形式
表意定数 英数字グループ項目 英字項目と英数字項目 ゾーン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つのオペランドのいずれかが英数字でも英字でもない場合、以下のように実行されます。

      1. ゾーン10進数のオペランドは同じサイズのゾーン10進数の英数字項目として扱われます。

      2. display浮動小数点項目は、数値ではなく英数字項目として扱われます。

    • 2つのオペランドのサイズが等しい場合、左端の文字から右端の文字まで比較し、初めて異なる文字が検出されたとき、その文字の照合シーケンスを比較して優先順位を決めます。

    • 2つのオペランドのサイズが等しくない場合、短い方のオペランドが長い方のオペランドのサイズほど空白で拡張され、比較が行われます。

  • DBCSの比較

    英数字比較の規則と同様です。2進照合シーケンスを使用します。

  • 数字の比較

    2つのオペランドの代数を比較します。

  • グループの比較

    2つのオペランドの英数字比較を実行します。英数字の基本データ項目の比較と同様に処理されます。

  • 指標の比較

    2つの指標項目の比較は、指標項目に含まれているオカレンス番号の比較です。指標をデータ項目またはリテラルと比較する場合、オカレンス番号とデータまたはリテラルの値を比較することになります。

データ・ポインターの比較条件

ポインター・データ項目に対しては、等しいか否かについてのみ比較できます。ポインター・データ項目は、USAGE POINTERとして定義されたデータ項目であるか、ADDRESS OF特殊レジスターです。

比較条件であるIF、PERFORM、EVALUATEは、SEARCH(形式1)ステートメントに使用できます。SEARCH形式2(SEARCH ALL)には使用できません。

figure pd data pointer relation
Figure 4. データ・ポインター比較条件の形式
項目 説明

identifier-1、identifier-3

レベル66とレベル88を除いて、いかなるデータ項目も使用できます。

identifier-2、identifier-4

USAGE POINTERとして定義されたデータ項目です。

NULL、NULLS

NULLポインターです。

プロシージャ・ポインターと関数ポインターの比較条件

等しいか否がについてのみ比較できます。

figure pd procedure function pointer relation
Figure 5. プロシージャ・ポインターと関数ポインターの比較条件
項目 説明

identifier-1、identifier-3

USAGE PROCEDURE-POINTERまたはFUNCTION-POINTERである必要があります。

NULL、NULLS

NULLポインターです。

符号条件

符号条件は、数字オペランドの値が0より大きいか、小さいか、等しいかを判別します。

figure pd sign condition
Figure 6. 符号条件の形式
項目 説明

operand-1

数字識別子または算術式である必要があります。

0より大きければPOSITIVE、0より小さければNEGATIVE、0に等しければZEROとなります。

符号なしオペランドは、POSITIVEまたはZEROのいずれかです。

NOT

真・偽の判別を逆にします。たとえば、NOT ZEROはオペランドが0でない正または負の値である場合、真となります。

スイッチ状態条件

スイッチ状態条件は、UPSIスイッチのオン/オフ状態を定義します。UPSIスイッチの値によって結果が決まります。

figure pd switch condition
Figure 7. スイッチ状態条件の形式
項目 説明

condition-name

特殊名段落に定義されたUPSIスイッチです。

1.2. 複合条件

複合条件は、論理演算子を使用した単純条件、組合せ条件の結合、または論理否定を使用した条件の否定などで作成されます。それぞれの論理演算子は、前後に空白文字が必要です。

括弧を使用しない場合、以下の順で優先順位が決まります。

  1. 算術演算子

  2. 単純条件

  3. NOT

  4. AND

  5. OR

複合条件の真の値は、個々の単純条件の真の値と論理演算子との相互関係に応じて判別されます。複合条件は、以下のいずれかにすることができます。

  • 単純否定条件

  • 組合せ条件(否定条件も可能)

単純否定条件

単純条件は、論理演算子NOTを使用して真・偽の値を否定することができます。

figure pd negated simple conditions
Figure 8. 単純否定条件の形式
項目 説明

conditions-1

conditions-1の真・偽の判別を反対にします。

conditions-1の値が真であれば、結果は偽となり、conditions-1の値が偽であれば、結果は真となります。

condition-1が括弧で囲まれていても結果は同じです。たとえば、以下の2つのステートメントは同じです。

NOT A IS EQUAL TO B
NOT ( A IS EQUAL TO B )
組合せ条件

2つ以上の条件が論理演算子により結合され、組合せ条件を作成します。

figure pd combined conditions
Figure 9. 組合せ条件の形式

以下の条件が、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つの方法のいずれかに省略することができます。

  • サブジェクトの省略

  • サブジェクトと比較演算子の省略

figure pd abbreviated combined relation conditions
Figure 10. 略記組合せ比較条件の形式

関連のある比較条件の中で、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))))