[ 自宅で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の画面に表示される。