COBOLの配列について解説します。COBOLでは配列のことを「表」や「テーブル(TABLE)」なんて呼んでいたりします。
配列の作成
まずは簡単な配列の作り方について解説します。
配列はデータ宣言の部分で、以下のように宣言することで作成することができます。
01 COMPANY.
03 PEOPLE OCCURS 10.
05 NAME PIC X(10).
これは、会社の名簿を想定しています。
「COMPANYというファイルを宣言し、その下にPEOPLEという表を作成し、NAMEという変数」で構成されています。
「OCCURS 10」という部分で、「NAME変数」を10個作成することを指示しています。
「OCCURS」の後ろの数値を変更することで、作成する変数の個数を変えることができます。
なお、レベル01の「COMPANY」部分では、OCCURSを指定することはできませんので注意!
配列の各要素にアクセスする
各要素にアクセスするには、要素に添字をつけます。
「NAME(1)」とします。
カッコ内の数値を変更することで、先ほど作成した10個の各要素にアクセスすることができます。
他の言語では添字の数値は0から始まることがよくありますが、COBOLでは1から添字が始まります。注意しましょう。
添字については、数値を格納した変数でも可能です。「NAME(N)」のようにすることも可。
データを格納
配列の各変数にデータを格納する方法は、変数にデータを格納するように「MOVE」を使用することでできる。
MOVE "ITO TARO" TO NAME(1).
MOVE "KATO HANA" TO NAME(2).
...
MOVE "WATANABE" TO NAME(10).
データを出力
先ほど格納したデータを出力するには、上記と同様に添字を使用して「DISPLAY」
DISPLAY NAME(1). → "ITO TARO"
DISPLAY NAME(2). → "KATO HANA"
...
DISPLAY NAME(10). → "WATANABE"
配列の大きさを可変にする
上記で説明した配列は、前もって大きさが事前にわかっている場合です。
しかし多くの場合で、配列の大きさは事後にわかることが多いです。そのため続いては配列の大きさを可変にするやり方を紹介します。
01 N PIC 99.
01 COMPANY.
03 PEOPLE OCCURS 1 TO 10 DEPENDING ON N.
05 NAME PIC X (10).
これは、「OCCURS 1 TO 10 DEPENDING ON N」という部分で、「NAME変数」を1〜10個作成することを意味しています。何個作成するのかは、N変数に入れる数値で指定します。
MOVE 5 TO N.
これで、「NAME変数」を5個作成するということになる。
もちろん、N変数で指定する範囲は1〜10の間にしなければならない。100個になる可能性がある場合には、「OCCURS 1 TO 100 DEPENDING ON N」とする必要がある。
コード見本
*> DENTIFICATION DIVISIONでは、プログラムの名前を記述するところ。
IDENTIFICATION DIVISION.
PROGRAM-ID. TABLES.
*> ENVIRONMENT DIVISION では、使用する計算機の特性によって定まる性質を記述する。
ENVIRONMENT DIVISION.
*> DATA DIVISION では、プログラム上で扱う全ての変数を定義している。
DATA DIVISION.
WORKING-STORAGE SECTION.
*> 何個作成するのか決める変数
01 N PIC 99.
*> 配列の作成
01 COMPANY.
03 HUMAN OCCURS 1 TO 5 DEPENDING ON N.
05 NAME PIC X(10).
*> PROCEDURE DIVISIONでは、プログラムが行う処理を書いていく。
PROCEDURE DIVISION.
MAIN SECTION.
*> 3個の要素を持つ配列を作成する
MOVE 3 TO N.
*> 配列に転記していく
MOVE "ITO" TO NAME(1).
MOVE "WATABE" TO NAME(2).
MOVE "SAITO" TO NAME(3).
*> それぞれ出力する
DISPLAY NAME(1).
DISPLAY NAME(2).
DISPLAY NAME(3).
*> プログラム終了!!お疲れ様でした。
STOP RUN.