COBOL EVALUATE命令の使用方法まとめ~条件で処理を分岐させよう

折乃 杏

折乃 杏

インフラエンジニア/ヘルプデスク(COBOLも経験あり)/ボールド歴3年

COBOLでは、同じ項目内の値を比較して処理を分岐させる時にEVALUATE命令を使用します。

処理の分岐はIF文でも記述できますが、EVALUATE命令を使用した方が他者にもわかりやすい記述になる場合があります。

使用例をあげながら、EVALUATE命令を使った処理の分岐方法について解説します。


1.EVALUATE命令の基本的な使い方

EVALUATE文は条件式のひとつです。

評価判定する項目の内容によって「○だったらAの処理」「△だったらBの処理」など、多岐選択を行う際に使用します。

EVALUATE文が実行されると先頭の「WHEN」から評価が行われ、最初に一致したWHENで指定している命令文が実行されます。

どのWHENにも該当しない場合には、「WHEN OTHER」の指定があれば、その命令文が実行されます。

1-1.EVALUATE文の書式

EVALUATE <評価対象> 
WHEN <値1>
   <実行する命令文>
WHEN <値2>
   <実行する命令文>
WHEN <値3>
   <実行する命令文>
WHEN OTHER
   <実行する命令文>
END-EVALUATE.

EVALUATE、評価対象、WHENなどの各要素間の空白や改行の有無は自由です。

<評価対象>の部分は以下が記述できます。

  • 一意名
  • 定数
  • TRUE
  • FALSE

1-2.EVALUATE文の使用例

※「WRK-NUM」「S-NUM」はWORKING-STORAGE SECTIONで記述

【例1】「WRK-NUM」の値が100だったら「S-SUM」へ値を代入する

EVALUATE WRK-NUM 
  WHEN 100
  MOVE WRK-NUM TO S-NUM
  WHEN OTHER
     CONTINUE
END-EVALUATE.

【例2】「WRK-NUM」の値が300500だったら「S-SUM」へ値を代入する

EVALUATE TRUE
  WHEN WRK-NUM = 300
  WHEN WRK-NUM = 500
   MOVE WRK-NUM TO S-NUM
  WHEN OTHER
   CONTINUE
END-EVALUATE.

【例3】評価対象が複数ある場合 「ALSO」を使用して記述する(評価基準は「かつ」)

EVALUATE WRK-NUM ALSO WRK-TOTAL
  WHEN 100 ALSO ANY
     MOVE WRK-NUM TO S-NUM
  WHEN 400 ALSO 3000 THRU 4000  ←WRK-NUMが400かつWRK-TOTALが3000~4000の場合
     MOVE ZERO TO S-NUM
  WHEN OTHER
     CONTINUE
END-EVALUATE.
  • THRU」は値の範囲指定
  • ANY」は評価しない場合に記述

2.EVALUATE命令とIF文の違い

IF文は「何かしらの条件が成り立ったときに○○の処理を実行する」というような場合に使用します。

条件分岐ができるという点では同じですが、IF文の中でさらにIF文の判定が入るようなネスト(入れ子)が多くなる場合にはEVALUATE文を使用します。

例えば「WRK-PEOPLE」「WRK-SEIBETSU」という2つの項目の値を評価して処理を分岐させたいとします。

WRK-SEIBETSU」には男性女性が入力されますが、

WRK-PEOPLE」の値が生徒先生以外の場合は空白です。

WRK-PEOPLE」には先生生徒講師、や、他の単語も入力される場合があります。

それぞれの人数を数えたいと思いますが、このように条件が多岐に分岐する場合は、IF文で作成するよりも、EVALUATE文を使用するとスッキリします。

IF文での作成例】

IF  WRK-PEOPLE  =  "生徒"
    IF  WRK-SEIBETSU  =  "男性"
        ADD  1  TO  WRK-CNT1
    ELSE
        ADD  1  TO  WRK-CNT2
    END-IF
ELSE
    IF  WRK-PEOPLE  =  "先生"
        IF  WRK-SEIBETSU  =  "男性"
        ADD  1  TO  WRK-CNT3
        ELSE
        ADD  1  TO  WRK-CNT4
        END-IF
    ELSE
        IF  WRK-PEOPLE  =  "講師"
            ADD  1  TO  WRK-CNT5
        ELSE
            ADD  1  TO  WRK-CNT6
        END-IF
    END-IF
END-IF.

EVALUATE文での作成例】

EVALUATE  WRK-PEOPLE  ALSO  WRK-SEIBETSU
    WHEN  "生徒"  ALSO  "男性"
        ADD 1 TO WRK-CNT1
    WHEN  "生徒"  ALSO  ANY
        ADD  1  TO  WRK-CNT2
    WHEN  "先生"  ALSO  "男性"
        ADD  1  TO  WRK-CNT3
    WHEN  "先生"  ALSO  ANY
        ADD  1  TO  WRK-CNT4
    WHEN  "講師"  ALSO  ANY
        ADD  1  TO  WRK-CNT5
    WHEN  OTHER
        ADD  1  TO  WRK-CNT6
END-EVALUATE.

※「WRK-PEOPLE」が生徒先生の場合は「WRK-SEIBETSU」に男性女性が必ず入力されています。


3.補足 COBOLコーディングのルール

3-1.英大文字と英小文字の使い方

COBOLは大文字、小文字のどちらで記述してもかまいませんが、小文字は大文字と同等に扱われますので、「COBOLは大文字で記述」と覚えてしまっても差支えありません。

ただし、コメント行、英数字定数、PROGRAM-ID(コンパイルオプションにより同等とすることが可能)は区別されます。

3-2 コーディングフォーマット

1行の記述は80文字以内におさめる必要があり、行内はいくつかの領域に分かれています。

1~6文字   ・・・一連番号領域 プログラムの行番号

7文字目    ・・・標識領域 その行に何が記述されているのかを示す

8~11文字  ・・・A領域 各部の開始宣言やデータ項目のレベル番号を記述する。

12~72文字 ・・・B領域 命令文や作業領域のレベル番号を記述する

73~80文字 ・・・見出し領域 コンパイル対象外のコメント領域

COBOL EVALUATEを徹底解説!

3-3.COBOLは4つの部からできている

COBOLには4つのDIVISIONと呼ばれる区分けがあります。この4つのDIVISION(部)は必ず記述する必要があります。

DIVISIONの中は、さらにSECTIONに細分化されています。

主なDIVISIONSECTION、記述項目を以下にまとめます。

IDENTIFICATION DIVISION(見出し部)

  • PROGRAM-ID. <プログラム名>.
  • AUTHOR <作成者>.
  • DATE-WRITTEN <作成日>. ※自動更新されません

★ENVIRONMENT DIVISION  (環境設定部)

  • CONFIGURATION SECTION
  • SOURCE-COMPUTER. <コンピュータ名>.
  • OBJECT-COMPUTER. <コンピュータ名>.
  • INPUT-OUTPUT SECTION
  • FILE-CONTROL.

★DATA DIVISION (データ部)

  • FILE SECTION.         (使用する入出力ファイルのデータ項目について定義します)
  • WORKING-STORAGE SECTION.(一時的なデータの保存場所など、作業領域を定義します。)
  • LINKAGE SECTION.     (外部プログラムとのデータのやりとりに関する情報を定義します)

PROCEDURE DIVISION (手続き部)

  • 命令文が記述されるため、SECTIONはありません。

以上、EVALUATE文についての基本的な使い方をまとめました。

条件分岐が多い時はEVALUATE文を使う、と思っていただければ迷わずにすむと思います。

私たちは、全てのエンジニアに市場価値を高め自身の望む理想のキャリアを歩んでいただきたいと考えています。もし、今あなたが転職を検討しているのであればこちらの記事をご一読ください。理想のキャリアを実現するためのヒントが見つかるはずです。

『技術力』と『人間力』を高め市場価値の高いエンジニアを目指しませんか?

私たちは「技術力」だけでなく「人間力」の向上をもって遙かに高い水準の成果を出し、関わる全ての人々に感動を与え続ける集団でありたいと考えています。

高い水準で仕事を進めていただくためにも、弊社では次のような環境を用意しています。

  • 定年までIT業界で働くためのスキル(技術力、人間力)が身につく支援
  • 「給与が上がらない」を解消する6ヶ月に1度の明確な人事評価制度
  • 平均残業時間17時間!毎週の稼動確認を徹底しているから実現できる働きやすい環境

現在、株式会社ボールドでは「キャリア採用」のエントリーを受付中です。

まずは以下のボタンより弊社の紹介をご覧いただき、あなたの望むキャリアビジョンをエントリーフォームより詳しくお聞かせください。

コメント

公式アカウントLINE限定!ボールドの内定確率が分かる無料診断実施中
公式アカウントLINE限定!
ボールドの内定確率が分かる無料診断実施中