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 追記