COBOLで配列を作る!DEPENDING ONを使用した方法も解説します

配列アイキャッチ

COBOLの配列について解説します。COBOLでは配列のことを「表」や「テーブル(TABLE)」なんて呼んでいたりします。

配列の作成

まずは簡単な配列の作り方について解説します。
配列はデータ宣言の部分で、以下のように宣言することで作成することができます。

01 COMPANY.
    03 PEOPLE OCCURS 10.
        05 NAME PIC X(10).

これは、会社の名簿を想定しています。
「COMPANYというファイルを宣言し、その下にPEOPLEという表を作成し、NAMEという変数」で構成されています。

「OCCURS 10」という部分で、「NAME変数」を10個作成することを指示しています。
「OCCURS」の後ろの数値を変更することで、作成する変数の個数を変えることができます。

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"

配列の大きさを可変にする

DEPENDING例

上記で説明した配列は、前もって大きさが事前にわかっている場合です。
しかし多くの場合で、配列の大きさは事後にわかることが多いです。そのため続いては配列の大きさを可変にするやり方を紹介します。

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.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA