[ 自宅でCOBOL_目次 ]

サブプロの作り方



コーディングする

ポイントはソース内の太文字を参照。
このサブプログラムは県コードから県名を取得する機能を実現する予定。
ソースの保管場所と名前は以下の通り。
→C:/cygwin/home/各ユーザID/cobol/GETPRFCT.COB
       IDENTIFICATION DIVISION.
       PROGRAM-ID. GETPRFCT.
      *------------------------------------------------------------
      * 県名取得プログラム(サブプロの特徴はコメント参照)
      *------------------------------------------------------------
       AUTHOR.     JIRO SUZUKI.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       COPY PRFCTTBL.
       01 CNS-AREA.
         03 CNS-RTNCD.
           05 CNS-RTNCD-NORMAL    PIC X(02) VALUE "00".
           05 CNS-RTNCD-UNMATCH   PIC X(02) VALUE "04".
           05 CNS-RTNCD-NOENTRY   PIC X(02) VALUE "99".
         03 CNS-NUMBER-OF-PREFECT PIC 9(02) COMP-3 VALUE 47.
         03 CNS-MATCH             PIC 9(01) COMP-3 VALUE 1.
       01 SW-AREA.
         03 SW-MATCH              PIC 9(01) COMP-3.
       01 WORK-AREA.
         03 IDX                   PIC 9(02) COMP-3.
       LINKAGE SECTION.           *> このSECTIONにインターフェースを
       COPY IO-PREFECT.           *> 指定すること(今回は左記のコピー句)
       PROCEDURE DIVISION USING IO-PREFECT.  *> インターフェースの01レベルを指定
       MAIN SECTION.
         MOVE CNS-RTNCD-NORMAL TO RTNCD.
         MOVE SPACE TO PREFECTNAMEKANA  OF IO-PREFECT.
         MOVE SPACE TO PREFECTNAMEKANJI OF IO-PREFECT.
      *
         IF PREFECTCD OF IO-PREFECT = SPACE              
            MOVE CNS-RTNCD-NOENTRY TO RTNCD  *>入力エラー
         END-IF.
      *
         IF RTNCD = CNS-RTNCD-NORMAL
           MOVE 0 TO SW-MATCH
           MOVE 1 TO IDX
           PERFORM UNTIL IDX > CNS-NUMBER-OF-PREFECT
             IF PREFECTCD OF IO-PREFECT = 
                PREFECTCD OF PRFCTTBL(IDX)
               MOVE PREFECTNAMEKANA  OF PRFCTTBL(IDX)
                 TO PREFECTNAMEKANA  OF IO-PREFECT
               MOVE PREFECTNAMEKANJI OF PRFCTTBL(IDX)
                 TO PREFECTNAMEKANJI OF IO-PREFECT
               MOVE CNS-NUMBER-OF-PREFECT TO IDX
               MOVE CNS-MATCH TO SW-MATCH
             END-IF
             ADD 1 TO IDX
           END-PERFORM
         END-IF.
      *
         IF SW-MATCH NOT = CNS-MATCH
           MOVE CNS-RTNCD-UNMATCH TO RTNCD    *>アンマッチエラー
         END-IF.
      *
         GOBACK.    *>最後はこれ(STOP RUNにしない)



コピー句を作成する

コピー句の作成場所と名前は以下の通り。
→C:/cygwin/home/各ユーザID/copy/IO-PREFECT.COB
       01 IO-PREFECT.
         03 PREFECTCD           PIC X(02).
         03 RTNCD               PIC X(02).
         03 PREFECTNAMEKANA     PIC X(10).
         03 PREFECTNAMEKANJI    PIC N(10).
         03                     PIC X(16).



県テーブルを作成する

コピー句の作成場所と名前は以下の通り。
→C:/cygwin/home/各ユーザID/copy/PRFCTTBL.COB
       01 PRFCTTBL.  *>県テーブル
         03 PRFCTTBL-VALUE.
           05        PIC X(32) VALUE "01ホッカイドウ   北海道       ".
           05        PIC X(32) VALUE "02アオモリケン    青森県       ".
           05        PIC X(32) VALUE "03イワテケン     岩手県       ".
           05        PIC X(32) VALUE "04ミヤギケン    宮城県       ".
           05        PIC X(32) VALUE "05アキタケン     秋田県       ".
           05        PIC X(32) VALUE "06ヤマガタケン   山形県       ".
           05        PIC X(32) VALUE "07フクシマケン    福島県       ".
           05        PIC X(32) VALUE "08イバラキケン   茨城県       ".
           05        PIC X(32) VALUE "09トチギケン    栃木県       ".
           05        PIC X(32) VALUE "10グンマケン    群馬県       ".
           05        PIC X(32) VALUE "11サイタマケン    埼玉県       ".
           05        PIC X(32) VALUE "12チバケン     千葉県       ".
           05        PIC X(32) VALUE "13トウキョウト    東京都       ".
           05        PIC X(32) VALUE "14カナガワケン   神奈川県      ".
           05        PIC X(32) VALUE "15ニイガタケン   新潟県       ".
           05        PIC X(32) VALUE "16トヤマケン     富山県       ".
           05        PIC X(32) VALUE "17イシカワケン    石川県       ".
           05        PIC X(32) VALUE "18フクイケン     福井県       ".
           05        PIC X(32) VALUE "19ヤマナシケン    山梨県       ".
           05        PIC X(32) VALUE "20ナガノケン    長野県       ".
           05        PIC X(32) VALUE "21ギフケン     岐阜県       ".
           05        PIC X(32) VALUE "22シズオカケン   静岡県       ".
           05        PIC X(32) VALUE "23アイチケン     愛知県       ".
           05        PIC X(32) VALUE "24ミエケン      三重県       ".
           05        PIC X(32) VALUE "25シガケン     滋賀県       ".
           05        PIC X(32) VALUE "26キョウトフ     京都府       ".
           05        PIC X(32) VALUE "27オオサカフ     大阪府       ".
           05        PIC X(32) VALUE "28ヒョウゴケン   兵庫県       ".
           05        PIC X(32) VALUE "29ナラケン      奈良県       ".
           05        PIC X(32) VALUE "30ワカヤマケン    和歌山県      ".
           05        PIC X(32) VALUE "31トットリケン    鳥取県       ".
           05        PIC X(32) VALUE "32シマネケン     島根県       ".
           05        PIC X(32) VALUE "33オカヤマケン    岡山県       ".
           05        PIC X(32) VALUE "34ヒロシマケン    広島県       ".
           05        PIC X(32) VALUE "35ヤマグチケン   山口県       ".
           05        PIC X(32) VALUE "36トクシマケン    徳島県       ".
           05        PIC X(32) VALUE "37カガワケン    香川県       ".
           05        PIC X(32) VALUE "38エヒメケン     愛媛県       ".
           05        PIC X(32) VALUE "39コウチケン     高知県       ".
           05        PIC X(32) VALUE "40フクオカケン    福岡県       ".
           05        PIC X(32) VALUE "41サガケン     佐賀県       ".
           05        PIC X(32) VALUE "42ナガサキケン   長崎県       ".
           05        PIC X(32) VALUE "43クマモトケン    熊本県       ".
           05        PIC X(32) VALUE "44オオイタケン    大分県       ".
           05        PIC X(32) VALUE "45ミヤザキケン   宮崎県       ".
           05        PIC X(32) VALUE "46カゴシマケン   鹿児島県      ".
           05        PIC X(32) VALUE "47オキナワケン    沖縄県       ".
         03 PRFCTTBL-R            REDEFINES PRFCTTBL-VALUE.
           05 PRFCT-REC           OCCURS  47.
             07 PREFECTCD           PIC X(02).
             07 PREFECTNAMEKANA     PIC X(10).
             07 PREFECTNAMEKANJI    PIC N(10).




コンパイルする

実行するコマンドは
cobc -m GETPRFCT.COB -I /home/各ユーザID/copy
(-I以降はコピー句を使用する場合のコピーライブラリを指定)


サブプロを実行するドライバプログラムを作成する

ソースの作成場所と名前は以下の通り。
→C:/cygwin/home/各ユーザID/cobol/DRV00001.COB
       IDENTIFICATION DIVISION.
       PROGRAM-ID. DRV00001.
       AUTHOR.     JIRO SUZUKI.
      *------------------------------------------------------------
      * 県名取得確認用ドライバー
      *------------------------------------------------------------
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WORK-AREA.
         03 W-PREFECTCD     PIC X(02).
         03 W-PREFECTCD-R   REDEFINES W-PREFECTCD PIC 9(02).
         03 IDX             PIC 9(02) COMP-3.
       COPY IO-PREFECT.  *>ここにインターフェースのコピー句を指定
       PROCEDURE DIVISION.
       MAIN SECTION.
         DISPLAY "----- ケンメイ シュトク(PGM=GETPRFCT) TEST START -----".
      *
         INITIALIZE IO-PREFECT.  *>インターフェース初期化
         MOVE SPACE TO IO-PREFECT.
      *
         MOVE 1 TO IDX.
         PERFORM UNTIL IDX >47
           MOVE IDX TO W-PREFECTCD-R
           MOVE W-PREFECTCD TO PREFECTCD OF IO-PREFECT
           CALL "GETPRFCT" USING IO-PREFECT
           DISPLAY "--- ノーマル ケース ---"
           DISPLAY "PRFCTCD=" PREFECTCD OF IO-PREFECT
           DISPLAY "RTNCD  =" RTNCD OF IO-PREFECT
           DISPLAY "PREFECTNAMEKANA =" PREFECTNAMEKANA OF IO-PREFECT
           DISPLAY "PREFECTNAMEKANJI=" PREFECTNAMEKANJI OF IO-PREFECT
           ADD 1 TO IDX
         END-PERFORM.
      *
         INITIALIZE IO-PREFECT.
         MOVE SPACE TO IO-PREFECT.
         MOVE SPACE TO PREFECTCD OF IO-PREFECT.
         CALL "GETPRFCT" USING IO-PREFECT.
         DISPLAY "--- ニュウリョクエラー ケース ---".
         DISPLAY "PRFCTCD=" PREFECTCD OF IO-PREFECT.
         DISPLAY "RTNCD  =" RTNCD OF IO-PREFECT.
         DISPLAY "PREFECTNAMEKANA =" PREFECTNAMEKANA OF IO-PREFECT.
         DISPLAY "PREFECTNAMEKANJI=" PREFECTNAMEKANJI OF IO-PREFECT.
      *
         INITIALIZE IO-PREFECT.
         MOVE SPACE TO IO-PREFECT.
         MOVE "00" TO PREFECTCD OF IO-PREFECT.
         CALL "GETPRFCT" USING IO-PREFECT.
         DISPLAY "--- アンマッチ ケース ---".
         DISPLAY "PRFCTCD=" PREFECTCD OF IO-PREFECT.
         DISPLAY "RTNCD  =" RTNCD OF IO-PREFECT.
         DISPLAY "PREFECTNAMEKANA =" PREFECTNAMEKANA OF IO-PREFECT.
         DISPLAY "PREFECTNAMEKANJI=" PREFECTNAMEKANJI OF IO-PREFECT.
      *
         DISPLAY "----- ケンメイ シュトク(PGM=GETPRFCT) TEST END   -----".
         STOP RUN.



ドライバプログラムをコンパイルする

実行するコマンドは
cobc -x DRV00001.COB -I /home/各ユーザID/copy


ドライバプログラムを実行する

実行するコマンドは
./DRV00001


結果を確認する

DISPLAYした内容がCygwinの画面に表示される。
サブプロ実行ログ