COBOLのOCCURS句とは?初心者でもわかる配列(テーブル)の定義方法
生徒
「先生、COBOLで同じ種類のデータをたくさん扱うにはどうすればいいですか?」
先生
「良いところに目をつけましたね。COBOLでは OCCURS句
を使って『配列』のようなデータ構造を定義できます。」
生徒
「配列ってなんですか?初めて聞きました。」
先生
「配列とは、同じ形をした箱を横にズラッと並べたイメージです。たとえば、10人分の名前や点数を扱いたいときにとても便利なんですよ。それでは、COBOLのOCCURS句の使い方をわかりやすく解説していきましょう!」
1. OCCURS句とは?
OCCURS句(オカーズ句)は、COBOLで「同じ形式のデータを複数まとめて管理する」ための書き方です。配列(テーブル)とも呼ばれます。
たとえば、10人分のテストの点数をそれぞれ別々に変数を用意して書くと、大変で面倒ですよね。
でも、OCCURS句を使うと、同じ型のデータをまとめて定義できるので、次のようにコンパクトに表現できます。
2. 配列(テーブル)のイメージを図で理解しよう
まずは図でイメージしましょう。
例えば、生徒の点数を5人分保存する場合、以下のような「データの箱」をイメージします。
- 点数(1)
- 点数(2)
- 点数(3)
- 点数(4)
- 点数(5)
このように、同じ形のデータを繰り返して管理したいときに、OCCURS句
が役立ちます。
3. OCCURS句を使ったCOBOLの定義方法
実際のCOBOLコードを見てみましょう。
01 STUDENT-SCORES.
05 SCORE PIC 9(3) OCCURS 5 TIMES.
このように書くと、「SCORE」という名前のデータが5個まとめて定義されます。
PIC 9(3)は、「3桁の数字」を意味しています。
OCCURS 5 TIMESは、「5回繰り返す」、つまり5個のデータを持つという意味です。
4. データに値を入れて表示するサンプル
配列の使い方をより理解するために、簡単なサンプルプログラムを見てみましょう。
IDENTIFICATION DIVISION.
PROGRAM-ID. OCCURS-DEMO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 STUDENT-SCORES.
05 SCORE PIC 9(3) OCCURS 5 TIMES.
01 I PIC 9.
PROCEDURE DIVISION.
MOVE 80 TO SCORE(1)
MOVE 90 TO SCORE(2)
MOVE 70 TO SCORE(3)
MOVE 85 TO SCORE(4)
MOVE 95 TO SCORE(5)
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 5
DISPLAY "生徒" I "の点数:" SCORE(I)
END-PERFORM
STOP RUN.
このプログラムでは、5人分の点数を「SCORE」という配列に格納し、それぞれを順番に表示しています。
5. 実行結果
上記のプログラムを実行すると、以下のような結果になります。
生徒1の点数:80
生徒2の点数:90
生徒3の点数:70
生徒4の点数:85
生徒5の点数:95
6. OCCURS句を使うと何が便利なの?
OCCURS句を使うことで、以下のようなメリットがあります:
- 同じ種類のデータをまとめて扱える
- 処理を
PERFORM
などで繰り返せるのでコードがすっきり - たくさんの変数を個別に定義する必要がない
これにより、ミスも減り、プログラムの見通しがよくなります。
7. OCCURS句の注意点
OCCURS句を使うときは、いくつか注意点もあります。
- OCCURSの中で別のOCCURSを使う「多次元配列」は複雑なので、まずは1次元配列から学びましょう。
- 配列の番号は、1から始まります(0ではありません)。
- 定義したサイズ(たとえば5)を超えてアクセスするとエラーになります。
8. 配列とループ処理(PERFORM)の組み合わせ
配列と相性がいいのが、PERFORM VARYING
です。
これは「繰り返し処理」をするための命令で、配列の各要素を1つずつ処理するのにぴったりです。
たとえば、5人分の点数を全部表示したいとき、さきほどのようにPERFORMと一緒に使えば、短くわかりやすいコードになります。