COBOLのPERFORM命令とは?処理を呼び出す・繰り返すためのPERFORMの使い方
COBOLでは、PERFORMという命令文があります。
プログラム内で、ある処理を繰り返し実行させたいときに使用しますが、繰り返しの回数や終了条件を指定することができます。
使用例をあげながら、PERFORM命令を使った記述方法について解説します。
目次
1.PERFORM命令の基本的な使い方
PERFORM命令には、主に以下の2つの使い方があります。
- サブルーチン(処理のまとまり)の呼び出し
- ある条件を満たすまで、処理を繰り返す(回数、または終了条件)
Aでは、呼び出したサブルーチンを1回実行したら、PERFORM命令記述行から次の行へ処理が進みます。
Bの場合は、指定の回数や終了条件を満たすまで、処理を繰り返してから次の行へ処理が進みます。
1-1.PERFORM命令の書式
以下の書式で記述します。
①サブルーチンの呼び出し
PERFORM <手続き名>
<手続き名>で記述された処理を1回実行します。
②ある終了条件を満たすまで繰り返す(UNTILの使用)
PERFORM <手続き名> UNTIL <終了条件>
例:PERFORM <手続き名> UNTIL END-FLG = “END”
<手続き名>で記述された処理を「END-FLG」に「END」が入力されるまで繰り返します。
③ある終了条件を満たすまで繰り返す(VARYINGの使用)
PERFORM VARYING CNT FROM <初期値> BY <増分値> UNTIL <終了条件>
例:PERFORM VARYING CNT FROM 1 BY 1 UNTIL CNT = 100
ADD 3 TO WRK-NUM
END-PERFORM.
「CNT」の値が100になるまで「WRK-NUM」に3を足す処理を繰り返します。
「ADD 3 TO WRK-NUM」を1回実行すると「CNT」の値が1増えます。
④ある終了条件を満たすまで繰り返す(回数を指定)
PERFORM <繰り返す回数> TIMES
例:PERFORM 5 TIMES
ADD 3 TO WRK-NUM
END-PERFORM.
5回繰り返します。
※<手続き名>に相当するのは、節名と段落名があります。
1-2.PERFORM命令の使用例
※「WRK-NAME」「END-FLG」「CNT」はWORKING-STORAGE SECTIONで記述
PROCEDURE DIVISION. PERFORM INIT001-PROC. ←1-1①の例 * PERFORM EDT001-PROC UNTIL END-FLG = "END" ←1-1②の例 * DISPLAY "COUNT END" UPON CONSOLE. * PERFORM VARYING CNT FROM 1 BY 1 UNTIL CNT = 100 ←1-1③の例 ADD 3 TO WRK-NUM END-PERFORM. * STOP RUN. ***************************************** *初期処理 ***************************************** INIT001-PROC SECTION. * MOVE SPACE TO END-FLG. MOVE SPACE TO WRK-NAME. * OPEN INPUT IN-FILE. INIT001-PROC-EXIT. EXIT. ***************************************** *編集その1 ***************************************** EDT001-PROC SECTION. READ IN-FILE AT END MOVE "END" TO END-FLG NOT AT END MOVE SYOHINMEI TO WRK-NAME PERFORM EDT002-PROC END-READ. * EDT001-PROC-EXIT. EXIT. *
※「SECTION」は節の見出しを定義するものです。
PROCEDURE DIVISION(手続き部)でA領域から記述された名前が節名または段落名とみなされ、SECTIONを伴うものが節、SECTIONのないものが段落となります。
節や段落は、プログラム作成者が必要に応じて作ります。
2.PERFORM命令とGO TO命令の違い
PERFORM命令は、それが記述された行を実行した後に、次の行から処理を続けますが、GO TO命令は指定された段落にジャンプし、GO TO命令が記述された行には戻ってきません。
具体例を見てみましょう。
【PERFORM命令の実行順】
PROCEDURE DIVISION. PERFORM COUNT-PROC. ① DISPLAY "COUNT END" UPON CONSOLE. ② STOP RUN. ③
見た目そのまま①→②→③、の順に命令が実行されます。
【GO TO命令の実行順】
PROCEDURE DIVISION. PERFORM COUNT-PROC. ① GO TO EDIT-001. ② DISPLAY "COUNT END" UPON CONSOLE. ③ ADD 1 TO WRK-CNT. ④ ・ ・ ・ STOP RUN.
①→②と進み、②で、段落「EDIT-001」へジャンプしますので、③、④は実行されません。
※GO TO命令は多用すると全体的な流れが把握しにくくなりますので、使用は最小限にとどめましょう。
3.補足 COBOLコーディングのルール
3-1.英大文字と英小文字の使い方
COBOLは大文字、小文字のどちらで記述してもかまいませんが、小文字は大文字と同等に扱われますので、「COBOLは大文字で記述」と覚えてしまっても差支えありません。ただし、コメント行、英数字定数、PROGRAM-ID(コンパイルオプションにより同等とすることが可能)は区別されます。
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 (環境設定部)
CONGIFURATION SECTION.
SOURCE-COMPUTER. <コンピュータ名>.
OBJECT-COMPUTER. <コンピュータ名>.
INPUT-OUTPUT SECTION.
- FILE-CONTROL.
DATA DIVISION(データ部)※フラグやカウンターなどはWORKING-STORAGE SECTION.に記述
FILE SECTION. (使用する入出力ファイルのデータ項目について定義します)
WORKING-STORAGE SECTION.(一時的なデータの保存場所など、作業領域を定義します。)
LINKAGE SECTION. (外部プログラムとのデータのやりとりに関する情報を定義します)
PROCEDURE DIVISION(手続き部) ※PERFORM命令はここで使用します。
- 命令文が記述されるため、規定のSECTIONはありません。
4.最後に
以上、PERFORM命令についての基本的な使い方をまとめました。
プログラムを作成する際に、関連する処理や機能ごとなど、まとまった処理をサブルーチンとして小分けにし、それらを組み合わせて全体を作り上げていくと、見直す際にも全体像をつかみやすくなります。
PERFORM命令を使用することで、その処理の繰り返し回数や終了条件も指定しやすく、わかりやすくなりますので、是非使用方法を覚えてください。
コメント