COBOL入門 Mission4-2

処 理 内 容 PROGRAM-ID 難易度 言語
テーブル処理(1次元) TBL002 1 COBOL
1:処理図
2:処理概要

データファイル(TBL0B.DAT)を読みCNTの値を1ずつ縦方向に画面表示する
データ1件の中には
  CNT値が10ケずつ書かれている
 ファイルフォーマットは(4)TBL0B.DAT 参照

 00001
 00002
 00003
 00004
 00005・・・・ のように表示する

00001 00002 00003 00004 00005  では駄目

3:ファイル名称 I-O 外部ファイル名 編成 KP/KL RL/BF access
(1)データファイル in C:\dat\tbl0b.dat seq  /  70/1
4:外部フォーマット定義(画面・書式等)
TBL0B.DAT フォーマット  B(02)9(05) occurs 10
BB9(05)BB9(05)BB9(05)BB9(05)BB9(05)BB9(05)BB9(05)BB9(05)BB9(05)BB9(05)
5:出力メッセージ
Perform varying命令を使ってみよう
6:その他
ポイント:入力(読込み)領域をOCCURSで定義する
********  ( テーブルを使ってみよう )  ********

 IDENTIFICATION             DIVISION.
 PROGRAM-ID.                TBL002.
*
 ENVIRONMENT                DIVISION.
 INPUT-OUTPUT               SECTION.
 FILE-CONTROL.
     SELECT  F1  ASSIGN  TO  "C:\DAT\TBL0B.DAT"  STATUS  FST
                         ACCESS  MODE  IS  SEQUENTIAL.
*
 DATA                       DIVISION.
 FILE                       SECTION.
 FD  F1.
 01  F1R.
     03  F1RR               PIC B(02)9(05) OCCURS 10.
 WORKING-STORAGE            SECTION.
 01  FST                    PIC X(02).
 01  I                      PIC 9(02).
*
 PROCEDURE                  DIVISION.
     OPEN  INPUT  F1
     PERFORM  UNTIL  FST  NOT  =  "00"
         READ  F1
               END       CONTINUE
               NOT  END  PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
                                 DISPLAY F1RR(I)
                         END-PERFORM
         END-READ
     END-PERFORM
     DISPLAY  "!!! TBL002 NOMAL-END !!!"
     CLOSE  F1  STOP  RUN.

テーブル操作の第2回目は、入力レコード内にテーブルが利用されているパターンを取り上げてみました。テーブルは単なる項目の集合体に過ぎません。当然、入力や出力のレコード内にもテーブルは利用できます。今回のポイントは入力レコードのテーブルをバラバラにし、縦に表示させるという目的ですね。

1件レコードを読み込んで、入力レコードに格納されているテーブル(一次元で10個)の中身を繰返し命令(PERFORM VARYING)を利用してDISPLAY命令で表示する、というものです。COBOLのDISPLAY命令は、JavaやC言語と違い、最初から改行しか選択できません。機種やバージョンによっては改行させないDISPLAY命令もあるかもしれませんが、私の知る限り必ず改行されます。これを利用すれば自動的に縦で表示されるわけです。

PERFORM VARYING 命令でテーブル制御

「PERFORM VARYING」という繰返し命令は、テーブル利用時には頻繁に利用されます。ここでもう一度おさらいしておきましょう。

PERFORM  VARYING インデックスス FROM 初期値 BY 増分値
                  UNTIL この繰返しを抜ける条件

      繰返し実行させたい命令1
      繰返し実行させたい命令2
	       
	       
      繰返し実行させたい命令N

END-PERFORM
PERFORM VARYING を利用したテーブル制御サンプル PERFORM VARYING IDX FROM 1 BY 1 UNTIL IDX > 9    MOVE ZERO TO TABLE-ITEM(IDX)    MOVE IDX  TO TABLE-NUMBER(IDX) ADD IDX TO GOUKEI-COUNT DISPLAY "TABLE(" IDX ") : ITEM=" TABLE-ITEM(IDX) " : NUMBER=" TABLE-NUMBER(IDX) " : GOUKEI=" GOUKEI-COUNT END-PERFORM
処理結果は以下の通り TABLE(1) : ITEM=0 : NUMBER=1 : GOUKEI=01 TABLE(2) : ITEM=0 : NUMBER=2 : GOUKEI=03 TABLE(3) : ITEM=0 : NUMBER=3 : GOUKEI=06 TABLE(4) : ITEM=0 : NUMBER=4 : GOUKEI=10 TABLE(5) : ITEM=0 : NUMBER=5 : GOUKEI=15 TABLE(6) : ITEM=0 : NUMBER=6 : GOUKEI=21 TABLE(7) : ITEM=0 : NUMBER=7 : GOUKEI=28 TABLE(8) : ITEM=0 : NUMBER=8 : GOUKEI=36 TABLE(9) : ITEM=0 : NUMBER=9 : GOUKEI=45

どうでしょう。わかりますか?テーブル利用時に、PERFORM VARYING が使われる理由は、テーブルの一括クリアやインデックスの値を利用したり取得することが非常に効率よく出来るためです。二次元、三次元のテーブルの場合、更にPERFORM VARYING の利用頻度は高くなります。テーブル利用時にはPERFORM VARYING命令をセットで憶えてしまいましょうね。
2006/05/23 追記


<< Back    Index    Next >>   < Top >