徹底解説!一歩先を行くCOBOL言語の多次元配列 | 応用ガイド

COBOL(コボル)言語の多次元配列を使用するための命令文の書き方とは

応用-多次元配列-イメージ

COBOL(コボル)言語の多次元配列とは?

1次元配列は、複数のデータを格納する箱が1列に並んだものを指しますが、多次元配列は1次元配列をさらに縦と横に複数並べた2次元配列以上の配列のことを言います。

COBOLでは多次元配列の配列を作成するには、1次元配列の定義の中でそれぞれ別の1次元配列を定義する必要があります。

応用-多次元配列-配列

COBOL(コボル)言語における多次元配列の定義

COBOLでは多次元配列を使用するためには、1次元配列と同じくデータ部(DATA DIVISION)にOCCURS句を使用して定義します。以下は3次元配列を定義する方法です。

書き方:

01 データ項目.

03 1次元配列のデータ項目定義 OCCURS 配列の最大要素数.

05 2次元配列のデータ項目定義 OCCURS 配列の最大要素数.

07 3次元配列のデータ項目定義 OCCURS 配列の最大要素数.

09 配列で使用するデータ項目定義.

記述例:

01 WORK-ITEM.

03 WORK-DATA-1 OCCURS 2.

05 WORK-DATA-11 OCCURS 2.

07 WORK-DATA-111 OCCURS 3.

09 WORK-ITEM-1 PIC X(10).

WORK-ITEMのWORK-DATA-1は1次元配列の項目で、データを格納する要素を2つ定義しています。

WORK-DATA-11は2次元配列の項目で、1次元配列であるWORK-DATA-1でそれぞれ2回使用できます。

WORK-DATA-111は3次元配列の項目で、2次元配列であるWORK-DATA-11でそれぞれ3回使用できます。

※3次元以上の多次元配列は、ソースコードの可読性やメンテナンスのしにくさなどの問題があるため、本記事では解説しません。

COBOL(コボル)言語における多次元配列の応用的な使い方

ここでは実際に多次元配列を定義して、配列の動作を確認するサンプルプログラムを紹介します。

多次元配列の基本的な使い方

以下は、多次元配列を定義して値を1つずつ格納する方法です。

サンプルプログラム1

  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. OCCURS_SAMPLE01.
  3. ENVIRONMENT DIVISION.
  4. CONFIGURATION SECTION.
  5.  
  6. DATA DIVISION.
  7. WORKING-STORAGE SECTION.
  8. *>----------------------------------------------------
  9. *> 多次元配列を定義
  10. *>----------------------------------------------------
  11. 01 WORK-ITEM.
  12. 03 WORK-DATA-1 OCCURS 2.
  13. 05 WORK-DATA-11 OCCURS 2.
  14. 07 WORK-DATA-111 OCCURS 3.
  15. 09 WORK-ITEM-1 PIC X(10).
  16.  
  17. PROCEDURE DIVISION.
  18. MAIN.
  19. *>----------------------------------------------------
  20. *> 配列処理
  21. *>----------------------------------------------------
  22. *> 値を格納
  23. MOVE "ITEM1-1-1" TO WORK-ITEM-1(1 1 1).
  24. MOVE "ITEM1-1-2" TO WORK-ITEM-1(1 1 2).
  25. MOVE "ITEM1-1-3" TO WORK-ITEM-1(1 1 3).
  26. MOVE "ITEM1-2-1" TO WORK-ITEM-1(1 2 1).
  27. MOVE "ITEM1-2-2" TO WORK-ITEM-1(1 2 2).
  28. MOVE "ITEM1-2-3" TO WORK-ITEM-1(1 2 3).
  29.  
  30. MOVE "ITEM2-1-1" TO WORK-ITEM-1(2 1 1).
  31. MOVE "ITEM2-1-2" TO WORK-ITEM-1(2 1 2).
  32. MOVE "ITEM2-1-3" TO WORK-ITEM-1(2 1 3).
  33. MOVE "ITEM2-2-1" TO WORK-ITEM-1(2 2 1).
  34. MOVE "ITEM2-2-2" TO WORK-ITEM-1(2 2 2).
  35. MOVE "ITEM2-2-3" TO WORK-ITEM-1(2 2 3).
  36.  
  37. *>----------------------------------------------------
  38. *> 結果を出力
  39. *>----------------------------------------------------
  40. DISPLAY "WORK-ITEM(1 1 1) : "WORK-ITEM-1(1 1 1).
  41. DISPLAY "WORK-ITEM(1 1 2) : "WORK-ITEM-1(1 1 2).
  42. DISPLAY "WORK-ITEM(1 1 3) : "WORK-ITEM-1(1 1 3).
  43. DISPLAY "WORK-ITEM(1 2 1) : "WORK-ITEM-1(1 2 1).
  44. DISPLAY "WORK-ITEM(1 2 2) : "WORK-ITEM-1(1 2 2).
  45. DISPLAY "WORK-ITEM(1 2 3) : "WORK-ITEM-1(1 2 3).
  46.  
  47. DISPLAY "WORK-ITEM(2 1 1) : "WORK-ITEM-1(2 1 1).
  48. DISPLAY "WORK-ITEM(2 1 2) : "WORK-ITEM-1(2 1 2).
  49. DISPLAY "WORK-ITEM(2 1 3) : "WORK-ITEM-1(2 1 3).
  50. DISPLAY "WORK-ITEM(2 2 1) : "WORK-ITEM-1(2 2 1).
  51. DISPLAY "WORK-ITEM(2 2 2) : "WORK-ITEM-1(2 2 2).
  52. DISPLAY "WORK-ITEM(2 2 3) : "WORK-ITEM-1(2 2 3).
  53.  
  54. STOP RUN.

実行結果:

応用-多次元配列-実行結果

サンプルプログラムでは、3次元の多次元配列を1次元の要素2、2次元の要素2、3次元の要素3でそれぞれ定義し、データを配列のデータ項目WORK-ITEM-1にそれぞれ格納しています。

多次元配列の応用的な使い方

続けて応用的な使い方として、多次元配列を定義して、PERFORM UNTILを使用したループ処理で多次元配列に値を格納するサンプルプログラムを紹介します。

サンプルプログラム2

  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. OCCURS_SAMPLE02.
  3. ENVIRONMENT DIVISION.
  4. CONFIGURATION SECTION.
  5.  
  6. DATA DIVISION.
  7. WORKING-STORAGE SECTION.
  8. *>----------------------------------------------------
  9. *> 多次元配列を定義
  10. *>----------------------------------------------------
  11. 01 WORK-ITEM.
  12. 03 WORK-DATA-1 OCCURS 2.
  13. 05 WORK-DATA-11 OCCURS 2.
  14. 07 WORK-DATA-111 OCCURS 3.
  15. 09 WORK-ITEM-1 PIC 9(02).
  16. 01 CNT-1 PIC 9(02).
  17. 01 CNT-2 PIC 9(02).
  18. 01 WORK-CNT-3.
  19. 03 CNT-3 PIC 9(02).
  20. 03 CNT-VAL PIC 9(05) VALUE 0.
  21.  
  22. PROCEDURE DIVISION.
  23. MAIN.
  24. *>----------------------------------------------------
  25. *> 配列処理
  26. *>----------------------------------------------------
  27.  
  28. *> 1次元配列
  29. PERFORM VARYING CNT-1 FROM 1 BY 1 UNTIL CNT-1 > 2
  30.  *> 2次元配列
  31. PERFORM VARYING CNT-2 FROM 1 BY 1 UNTIL CNT-2 > 2
  32.  *> 3次元配列
  33. PERFORM VARYING CNT-3 FROM 1 BY 1 UNTIL CNT-3 > 3
  34. *> 値を格納
  35. ADD 1 TO CNT-VAL
  36. MOVE CNT-VAL TO WORK-ITEM-1(CNT-1 CNT-2 CNT-3)
  37. DISPLAY "WORK-ITEM("CNT-1" "CNT-2" "CNT-3") :"WORK-ITEM-1(CNT-1 CNT-2 CNT-3)
  38. END-PERFORM
  39. END-PERFORM
  40. END-PERFORM
  41.  
  42. STOP RUN.

実行結果:

応用-多次元配列-実行結果

サンプルではPERFORM UNTILで、1次元配列から3次元配列を要素分ループして配列の項目WORK-ITEM-1にデータを格納しています。

このようにループ処理で配列の値を格納する方法は、プログラミングの処理においてよく使われますので、仕組みをよく理解しておきましょう。

練習問題

ここでは練習問題にチャレンジしてみましょう。

1次元配列の要素数2、2次元の要素数3、3次元配列の要素数が3の多次元配列を定義してください。

回答:

01 WORK-ITEM.

03 WORK-DATA-1 OCCURS 2.

05 WORK-DATA-11 OCCURS 3.

07 WORK-DATA-111 OCCURS 3.

この記事を読んだ人は、こちらの記事も読んでいます

あなたのCOBOL技術を活かしませんか?

株式会社COBOLの求人・転職・募集情報を見る

COBOL入門のカテゴリー

|  基礎  |  応用  |  勉強  |  試験  |  辞書  |

取引企業様 募集中
COBOL技術者 募集
COBOL魂
読者採用
COBOL入門