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

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

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

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

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

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

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

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

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

1-1.EVALUATE文の書式

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

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

  • 一意名
  • 定数
  • TRUE
  • FALSE

1-2.EVALUATE文の使用例

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

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

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

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

  • THRU」は値の範囲指定
  • ANY」は評価しない場合に記述

2.EVALUATE命令とIF文の違い

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

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

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

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

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

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

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

IF文での作成例】

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時間!毎週の稼動確認を徹底しているから実現できる働きやすい環境

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

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