COBOLのPERFORM命令とは?処理を呼び出す・繰り返すためのPERFORMの使い方

折乃 杏

折乃 杏

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

COBOLでは、PERFORMという命令文があります。

プログラム内で、ある処理を繰り返し実行させたいときに使用しますが、繰り返しの回数や終了条件を指定することができます。

使用例をあげながら、PERFORM命令を使った記述方法について解説します。

One dayインターン

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

PERFORM命令には、主に以下の2つの使い方があります。

  1. サブルーチン(処理のまとまり)の呼び出し
  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文字 ・・・見出し領域 コンパイル対象外のコメント領域

PERFORMについて解説!

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

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

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

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

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命令を使用することで、その処理の繰り返し回数や終了条件も指定しやすく、わかりやすくなりますので、是非使用方法を覚えてください。

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

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

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

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

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

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

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

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

コメント

26卒 新卒学生向け主催企業:株式会社ボールド
どんなIT企業なら理想のエンジニアになれるのか?

2時間でIT業界の全てが分かるOne dayインターン

26卒 新卒学生向け主催企業:株式会社ボールド
どんなIT企業なら理想のエンジニアになれるのか?

2時間でIT業界の全てが分かるOne dayインターン