| ||||||||
| ||||||||
|
********** ( 二次元テーブル ) ********** IDENTIFICATION DIVISION. PROGRAM-ID. TBL010. DATA DIVISION. WORKING-STORAGE SECTION. 01 I PIC 9(02). 01 J PIC 9(02). 03 WCNT PIC 9(05) VALUE 0. ***** テーブル領域(二次元) ***** 01 CNT-AREAS. 03 CNTA OCCURS 10. * ^^^^^^^^^ 05 CNT OCCURS 10 PIC 9(05)B(02). * ^^^^^^^^^ * (二次元テーブルの領域定義は OCCURS OCCURS となる) PROCEDURE DIVISION. PERFORM VARYING J FROM 1 BY 1 UNTIL J > 10 * ^^^^^^^ ^^^^^^^ * PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10 * ^^^^^^^ ^^^^^^^ ADD 1 TO WCNT MOVE WCNT TO CNT (J I) * [J行 の I番目] END-PERFORM * ^^^^^^^^^^^ DISPLAY CNTA (J) END-PERFORM * ^^^^^^^^^^^ STOP RUN. [ TBL010 処理結果画面] 00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 00024 00025 00026 00027 00028 00029 00030 00031 00032 00033 00034 00035 00036 00037 00038 00039 00040 00041 00042 00043 00044 00045 00046 00047 00048 00049 00050 00051 00052 00053 00054 00055 00056 00057 00058 00059 00060 00061 00062 00063 00064 00065 00066 00067 00068 00069 00070 00071 00072 00073 00074 00075 00076 00077 00078 00079 00080 00081 00082 00083 00084 00085 00086 00087 00088 00089 00090 00091 00092 00093 00094 00095 00096 00097 00098 00099 00100
先に値をテーブルにセットして表示する場合
********** テーブルセットと表示を分ける ********** * [ 初めに 1〜100 までの値を テーブルにセットしてから 表示する ] IDENTIFICATION DIVISION. PROGRAM-ID. TBL01A. * DATA DIVISION. WORKING-STORAGE SECTION. 01 I PIC 9(02). 01 J PIC 9(02). 01 WCNT PIC 9(05) VALUE 0. 01 CNT-AREAS. 03 CNTA OCCURS 10. 05 CNTB OCCURS 10. 07 CNT PIC 9(05)B(02). * PROCEDURE DIVISION. * ***** テーブルセット (二次元処理) ***** DISPLAY "!!! TBL01A STARTED !!!" PERFORM VARYING J FROM 1 BY 1 UNTIL J > 10 PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10 ADD 1 TO WCNT MOVE WCNT TO CNT (J I) END-PERFORM END-PERFORM DISPLAY "*** TABLE-SET-END ***" * ***** テーブル表示 (一次元処理) ***** PERFORM VARYING J FROM 1 BY 1 UNTIL J > 10 DISPLAY CNTA (J) END-PERFORM DISPLAY "!!! TBL01A ENDED !!!" STOP RUN.
さあ、ついに二次元テーブルです。これが理解できれば後はCOBOLプログラミングで覚えるべきことは、そう多く残っていません。またテーブルはCOBOLに限らずどんな言語でも必ず利用されています。知っていて当たり前というレベルなので考え方だけはしっかり理解していきましょう。
まず二次元とはなんでしょう?一次元は同じ変数を入れる箱が横にありました。二次元ではこれに縦の要素が加わります。
一次元テーブル
CNT | CNT | CNT | CNT |
二次元テーブル
CNT | CNT | CNT | CNT |
CNT | CNT | CNT | CNT |
CNT | CNT | CNT | CNT |
こんな感じになります。これをCOBOLで表記するとこうなります。
*> 一次元テーブル 01 TABLE1. 02 Y-LINE OCCURS 4. 03 CNT PIC 9(05).
*> 二次元テーブル 01 TABLE2. 02 X-LINE OCCURS 3. 03 Y-LINE OCCURS 4. 04 CNT PIC 9(05).
つまり縦の繰り返し数と、横の繰り返し数を指定してあげればいいわけです。そしてその変数を取り出すときは、こんな風に記述します。
*> 一次元テーブル MOVE 1 TO CNT(3) *> 3番目に1を転送
*> ニ次元テーブル MOVE 1 TO CNT(2 3) *> 縦2行目、横3番目に1を転送
どうです?わかりますか?あとは上のプログラムのように、IとJというインデックスを利用して縦と横の場所を指定し、同じテーブル内で別々の箱に数値を次々と格納していくわけです。テーブルが三次元、四次元と増えても、階層が増えるだけで基本的には二次元となんら変わりません。