COBOL入門 Mission4-1

処 理 内 容 PROGRAM-ID 難易度 言語
テーブル処理(1次元) TBL001 1 COBOL
1:処理図
2:処理概要

1〜100までカウントしながら、1行に10個ずつカウント値を表示する
   (計10行表示することになる)
00001000020000300004  〜  000080000900010
00011000120001300014  〜  000180001900020
           ↓
00091000920009300094  〜  000980009900100

★OPTION 見栄えを変えてみよう
各カウントの間に2byteの空白を入れる

00001  00002  00003   〜  00009  00010
00011  00012  00013   〜  00019  00020
           ↓
00091  00092  00093   〜  00099  00100
********  一次元テーブル  ********

 IDENTIFICATION             DIVISION.
 PROGRAM-ID.                TBL001.
 DATA                       DIVISION.
 WORKING-STORAGE            SECTION.
 01  I                      PIC 9(02).
 01  WCNT                   PIC 9(05) VALUE 0.
 01  DISP.
     03  CNT                PIC X(05) OCCURS 10.
*                                     ^^^^^^ ^^
 PROCEDURE                  DIVISION.
     PERFORM  UNTIL  WCNT  =  100
*    (WCNT の値が 100 になるまで繰り返す)

         PERFORM  VARYING  I  FROM  1  BY  1  UNTIL  I  >  10
*        ( I の値を1から1ずつ増やしながら I > 10 まで繰り返す)

             ADD  1  TO  WCNT
*            (WCNT に 1 を加える)

             MOVE  WCNT  TO  CNT(I)
*            (WCNT を CNT の I番目に MOVEする)

         END-PERFORM
*        (繰返し終了)

         DISPLAY  DISP
*        (DISP を表示する)

     END-PERFORM
     (繰返し終了)

     STOP RUN.
*    (処理停止)

[ TBL000 処理結果画面] 00001000020000300004000050000600007000080000900010 00011000120001300014000150001600017000180001900020 00021000220002300024000250002600027000280002900030 00031000320003300034000350003600037000380003900040 00041000420004300044000450004600047000480004900050 00051000520005300054000550005600057000580005900060 00061000620006300064000650006600067000680006900070 00071000720007300074000750007600077000780007900080 00081000820008300084000850008600087000880008900090 00091000920009300094000950009600097000980009900100

まずはテーブルの初歩、一次元テーブルです。一次元とは簡単に言えば横一列に同じ箱(項目)を並べた状態だと思えばいいでしょう。Work領域にある、「DISP」という入れ物に、「CNT」という箱を10個並べて用意し、その箱へ「WCNT」の数字をそれぞれ格納し、入れ物(DISP)が一杯になったら、ドバッと吐き出し(出力し)、また続きの数字(WCNT)を箱(CNT)に入れてゆく、といった流れです。テーブルが二次元、三次元、四次元と増えてもこの基本構造は変わらないため、テーブルの理論さえ抑えておけば、全然問題ない。

2006/05/22 追記

では次に、このままではちょっと表示が見づらいので、数値の間にわかりやすく「:」を編集してみましょう。

**********  項目間に : を編集  **********
*      [集団項目の繰返し指定]

 IDENTIFICATION             DIVISION.
 PROGRAM-ID.                TBL00A.
*
 DATA                       DIVISION.
 WORKING-STORAGE            SECTION.
 01  I                      PIC 9(02).
 01  WCNT                   PIC 9(05) VALUE 0.
*
 01  DISP.
     03  CNTA  OCCURS  10.
         05  CNT            PIC 9(05).
         05                 PIC X(01) VALUE ":".
*
 PROCEDURE                  DIVISION.
     PERFORM  UNTIL  WCNT  =  100
         PERFORM  VARYING  I  FROM  1  BY  1  UNTIL  I  >  10
             ADD  1  TO  WCNT
             MOVE  WCNT  TO  CNT(I)
         END-PERFORM
         DISPLAY  DISP
     END-PERFORM
     STOP  RUN.

[ TBL00A 処理結果画面] 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

少し見やすくなりました。じゃあもっと見やすくしてみましょうか。数値の間にブランク(空白)を入れてみます。

**********  ブランク編集の手法  **********

 IDENTIFICATION             DIVISION.
 PROGRAM-ID.                TBL00B.
*
 DATA                       DIVISION.
 WORKING-STORAGE            SECTION.
 01  I                      PIC 9(02).
 01  WCNT                   PIC 9(05) VALUE 0.
 01  DISP.
     03  CNT                PIC B(02)9(05) OCCURS 10.
*
 PROCEDURE                  DIVISION.
     PERFORM  UNTIL  WCNT  =  100
         PERFORM  VARYING  I  FROM  1  BY  1  UNTIL  I  >  10
             ADD  1  TO  WCNT
             MOVE  WCNT  TO  CNT(I)
         END-PERFORM
         DISPLAY  DISP
     END-PERFORM
     STOP  RUN.

[ TBL00B 処理結果画面] 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

最初に比べ、随分見やすくなったのがわかるでしょうか?プログラムって作ってお終いじゃなく、常にもっとよくなるように絶えず工夫する努力が必要です。


<< Back    Index    Next >>   < Top >