SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

COBOLプログラミング

COBOLプログラミング 基本編

第2回 OpenCOBOLを使用したCOBOL基本プログラミングの解説

  • X ポスト
  • このエントリーをはてなブックマークに追加

基本的なCOBOLの文法(4)~PROCEDURE DIVISION 2/2~

D.PROCEDURE DIVISION 2/2

条件処理

 IF文により、条件を評価し、対応する文を実行させることができます。構文は次のとおりです。

IFの構文
IF 条件 THEN 文1 ELSE 文2.

 条件が真の場合、文1を実行し、それ以外は文2を実行します。文1および文2は複数の文を指定できます。以下にIF文の例を示します。

IF文の例
002010      IF LCNT-1 > 10 THEN
002020         ADD 1 TO PCNT-1
002030         MOVE 1 TO LCNT-1
002040      ELSE
002050         ADD 1 TO LCNT-1
002060      END-IF.

 IF文の中にIF文を記述し入れ子構造にすることもできます。以下に入れ子構造のIF文の例を示します。

入れ子構造のIF文の例
002010      IF LCNT-1 > 10 THEN
002020         IF PCNT-1 > 5 THEN
002030            MOVE 1 TO PCNT-1
002040         ELSE
002050            ADD 1 TO PCNT-1
002060         END-IF
002070         MOVE 1 TO LCNT-1
002080      ELSE
002090         ADD 1 TO LCNT-1
002100      END-IF.

 真条件または偽条件で処理を行わない場合は"NEXT SENTENCE"を記述します。

NEXT SENTENCEの指定例
002010      IF LCNT-1 > 10 THEN
002020         NEXT SENTENCE
002030      ELSE
002040         ADD 1 TO LCNT-1
002050      END-IF.
002060      IF PCNT-1 > 1 THEN
002070         ADD 1 TO PCNT-1
002080      ELSE
002090         NEXT SENTENCE
002100      END-IF.

 偽条件で"NEXT SENTENCE"の場合は、ELSEおよびNEXT SENTENCEを省略できます。

ELSE NEXT SENTENCEの省略
002060      IF PCNT-1 > 1 THEN
002070         ADD 1 TO PCNT-1
002080*     ELSE                (コメント行にしてみました)
002090*        NEXT SENTENCE    (コメント行にしてみました)
002100      END-IF.
別の部分に制御を移す

 GO TO文により、手続き部のある部分から別の部分に制御を移すことができます。構文は次のとおりです。

GO TO文の構文
(1) GO TO 手続き名.
(2) GO TO 手続き名1 手続き名2… DEPENDING ON 一意名.
  • (1)は、手続き名で指定された箇所に制御を移します。
  • (2)は一意名の内容により、指定された箇所に制御を移します。
繰り返し実行

 PERFORM文により一連の文を繰り返し実行できます。構文は次のとおりです。

PERFORM文の構文
(1) PERFORM 手続き名1 THRU 手続き名2 回数 TIMES.
(2) PERFORM 回数 TIMES 文 END-PERFORM.
(3) PERFORM 手続き名1 THRU 手続き名2 TEST 前後指定 UNTIL 条件.
(4) PERFORM TEST 前後指定 UNTIL 条件 文 END-PERFORM.
  • (1)は、手続き名1から手続き名2までの間を回数分実行します。1回のみ実行する場合は、"回数 TIMES"を省略できます。また、手続き名1のみを実行する場合は、"THRU 手続き名2"を省略できます。以下に例を示します。
  • PERFORM 手続き名1 THRU 手続き名2 回数 TIMES.の例
    003000      PERFORM SHORI1 THRU SHORI2 3 TIMES.
    ...(途中省略)
    005000 SHORI1.
    005010      MOVE 1 TO CNT1.
    005020      MOVE 1 TO CNT2.
    006000 SHORI2.
    005010      MOVE 1 TO CNT3.
    005020      MOVE 1 TO CNT4.
    
  • (2)はPERFORM内で指定した単一または複数の文を回数分実行します。1回のみ実行する場合は、"回数 TIMES"を省略できます。以下に例を示します。
  • PERFORM 回数 TIMES 文 END-PERFORM.の例
    003000      PERFORM 3 TIMES
    003010          MOVE 1 TO CNT1
    003020          MOVE 1 TO CNT2
    003030          MOVE 1 TO CNT3
    003040      END-PERFORM.
    
  • (3)は、手続き名1から手続き名2までの間を条件が真の間実行し、「TEST 前後」により、条件の判定を繰り返しの前か後で行うことを指定します。手続き名1のみを実行する場合は、"THRU 手続き名2"を省略できます。「TEST 前後」を省略することもできます。省力すると条件の判定を繰り返しの前で行います。また、繰り返し実行終了時に条件判定で使用する値を変更することもできます。以下に例を示します。
  • PERFORM 手続き名1 THRU 手続き名2 TEST 前後指定 UNTIL 条件.の例
    003000      MOVE 1 TO CNT5.
    003010      PERFORM SHORI1 THRU SHORI3 TEST AFTER UNTIL CNT5 < 10.
    003020      PERFORM SHORI1 THRU SHORI2 VARYING CNT5 FROM 1 BY 1 
                UNTIL CNT5 < 10.
    ...(途中省略)
    005000 SHORI1.
    005010      MOVE 1 TO CNT1.
    005020      MOVE 1 TO CNT2.
    006000 SHORI2.
    005010      MOVE 1 TO CNT3.
    005020      MOVE 1 TO CNT4.
    005030 SHORI3.
    005040      ADD 1 TO CNT5.
    
  • (4)は、PERFORM内で指定した単一または複数の文を条件が真の間実行し、「TEST 前後」により、条件の判定を繰り返しの前か後で行うことを指定します。「TEST 前後」を省略することもできます。省力すると条件の判定を繰り返しの前で行います。また、繰り返し実行終了時に条件判定で使用する値を変更することもできます。以下に例を示します。
  • PERFORM TEST 前後指定 UNTIL 条件 文 END-PERFORM.の例
    003000      PERFORM TEST AFTER VARING CNT5 FROM 1 BY 1 UNTIL CNT5 < 10
    003010          MOVE 1 TO CNT1
    003020          MOVE 1 TO CNT2
    003030          MOVE 1 TO CNT3
    003040      END-PERFORM.
    
ファイル入出力

 ファイル入出力は、OPEN文でファイルを用意し、READ文で入力、WRITE文で出力します。主な構文は次のとおりです。

OPEN文の構文
OPEN INPUT ファイル名.
OPEN OUTPUT ファイル名.
READ文の構文
READ ファイル名 INTO 一意名 AT END 文1 NOT AT END 文2 END-READ.
WRITE文の構文
WRITE レコード名 FROM 一意名.

 詳細は稿を改めて解説します。

プログラムの終了

 プログラムの終了はSTOP文で指定します。構文は次のとおりです。

STOP文の構文
STOP RUN.

 STOP文は手続き部のどこにでも、またいくつでも記述することができ、当該処理を実行したときに上位処理に制御を渡します。OpenCOBOLでは、RETURN-CODEという特別な変数が用意されており、これに値を設定すると上位処理にリターンコードを渡すことができます。

リターンコードを渡すプログラム例
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. SAMPLE.
000300 ENVIRONMENT DIVISION.
000400 DATA DIVISION.
000500 FILE SECTION.
000600 WORKING-STORAGE SECTION.
001100 PROCEDURE DIVISION.
001200      DISPLAY "Hello World!!".
001300      MOVE ZERO TO RETURN-CODE.
001400 STOP RUN.

 上記の例では、リターンコードは0となります(ZEROは0の定数表記です)。

まとめ

 以上、サンプルコードを交えて、COBOLの言語仕様について基本的な内容を一通り説明しましたが、言語仕様にコーディング規約が内包されているような感想を持たれた方は多いと思います。

 実際に使用されているCOBOLは周辺機能(プラグイン)がさらに充実しており、現在でも実際の業務として新規に開発が可能な言語となっています。OpenCOBOLのプラグインは開発途上ではありますが、これを機会にCOBOL言語を触れてみてはどうでしょうか。

 次回は、ファイル処理を中心に、実際にコーディングをして機能を確かめてみたいと思います。

参考

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
COBOLプログラミング連載記事一覧

もっと読む

この記事の著者

布施 榮一(ふせえいいち)

布施加工有限会社 代表取締役布施加工って何しているとこなの??実はIT屋さんだったりします(笑)Linux基盤各種サービスの設計構築およびコンサルティングをやっています。ブログもちょこちょこっと書いてます。Alinous-Core 正規販売代理店

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2303 2008/06/25 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング