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と一緒に使えば、短くわかりやすいコードになります。
まとめ
今回の記事では、COBOLにおけるOCCURS句の役割と使い方について学びました。OCCURS句は、同じ構造のデータを複数まとめて管理するための便利な仕組みで、配列(テーブル)のように使えるのが特徴です。
特に、複数人の点数や商品リストなど、同じ形式の情報をたくさん扱う場面では、ひとつずつ変数を定義するよりもOCCURS句を使ったほうがコードの可読性や保守性が向上します。記事内で紹介したサンプルプログラムのように、配列の各要素に値を設定し、PERFORM VARYINGでループ処理を行うことで、効率的な出力が実現できました。
さらに、OCCURS句を使う際にはいくつかのルールや注意点もありました。たとえば、配列の添字は1から始まり、定義数を超えてアクセスしてはいけないこと、多次元配列は初学者には少し難しいことなどが挙げられます。こういった点を意識しながらプログラムを組むことで、エラーを防ぎ、安全で信頼性の高いCOBOLコードを書くことができます。
実際にコードを書いてみると、COBOLの構文は英語に近く、意味が想像しやすいので、初心者にも比較的やさしい設計になっていると感じられたのではないでしょうか。特に、OCCURS句とPERFORM文を組み合わせることで、COBOLでも繰り返し処理やデータの一括処理が可能になる点は、実務でも非常に役立つ知識です。
最後に、応用として「生徒名と点数」をセットで配列に持たせる例を紹介します。データ構造の入れ子(ネスト)とOCCURS句の組み合わせを通じて、より実践的な配列の扱い方を学びましょう。
サンプル:生徒名と点数をセットで持つ配列の定義
IDENTIFICATION DIVISION.
PROGRAM-ID. STUDENT-RECORDS.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 STUDENT-LIST.
05 STUDENT-INFO OCCURS 3 TIMES.
10 STUDENT-NAME PIC A(10).
10 STUDENT-SCORE PIC 9(3).
01 I PIC 9.
PROCEDURE DIVISION.
MOVE "TANAKA " TO STUDENT-NAME(1)
MOVE 88 TO STUDENT-SCORE(1)
MOVE "SUZUKI " TO STUDENT-NAME(2)
MOVE 92 TO STUDENT-SCORE(2)
MOVE "YAMADA " TO STUDENT-NAME(3)
MOVE 75 TO STUDENT-SCORE(3)
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3
DISPLAY "名前:" STUDENT-NAME(I) " 点数:" STUDENT-SCORE(I)
END-PERFORM
STOP RUN.
このように、OCCURS句の中に複数の要素(名前と点数)を含めることで、より複雑な情報を整理して持たせることができます。実務でのデータ処理や帳票出力などにも応用できるので、ぜひ練習してみてください。
生徒
「先生、OCCURS句って配列みたいなものなんですね。今までひとつずつ変数を作ってたのが、まとめて書けてすごく楽になりました!」
先生
「そうですね。配列のように繰り返しデータを扱うにはOCCURS句がぴったりです。処理もPERFORMで簡単にできますし、ミスも減りますよ。」
生徒
「それに、名前と点数を一緒に持てる例も面白かったです!あれってネストになってるんですね?」
先生
「よく気付きましたね。OCCURSの中に複数の項目を入れることで、1人分の情報をひとまとまりで管理できるようになります。」
生徒
「これができたら、実際の業務データとかも扱えそうな気がしてきました!」
先生
「その通りです。COBOLは今でも現場で使われていますから、こうした基本をしっかり押さえておくと強みになりますよ。」