
COBOLのEVALUATEとは?条件で処理を分岐させるEVALUATE命令の使い方
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」の値が300か500だったら「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文字 ・・・見出し領域 コンパイル対象外のコメント領域
3-3.COBOLは4つの部からできている
COBOLには4つのDIVISIONと呼ばれる区分けがあります。この4つのDIVISION(部)は必ず記述する必要があります。
DIVISIONの中は、さらにSECTIONに細分化されています。
主なDIVISIONとSECTION、記述項目を以下にまとめます。
★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文を使う、と思っていただければ迷わずにすむと思います。
コメント