COBOLの心臓部!データ部(DATA DIVISION)の役割と基本構造を理解しよう
COBOLプログラムは、大きく4つの部(DIVISION)に分かれています。環境設定を書く「環境部」、実際の処理を書く「手続き部」、外部とのやりとりを書く「識別部」、そして扱う情報を定義する場所が「データ部」です。
データ部は、例えるなら「プログラムの材料置き場」。レシピ通りに料理を作るにも、材料がどこにあるか分からなければ話になりませんよね。プログラムも同じで、扱うデータがどこで何をするのか決まっていないと、正しく動いてくれません。
そしてデータ部の中にも細かく棚(セクション)が分かれています。どんな材料をどこに置くか、ルールがあるわけです。ざっくり言えば、外から持ち込んだデータを置く場所、自分で使うデータを置く場所、他のプログラムとやりとりするための場所の3種類があります。
COBOL全体構造図(簡略版) ┌──────────────────┐ │IDENTIFICATION DIVISION│←プログラムの名前や識別情報 ├──────────────────┤ │ENVIRONMENT DIVISION │←使用する機器やファイル情報 ├──────────────────┤ │DATA DIVISION │←★データの材料置き場 │ ├ FILE SECTION │ │ ├ WORKING-STORAGE SECTION│ │ └ LINKAGE SECTION │ ├──────────────────┤ │PROCEDURE DIVISION │←処理の手順を書く場所 └──────────────────┘
COBOL データ部の主要セクションを詳細解説!それぞれの役割と使い方
データ部には、大きく分けて3つの棚(セクション)があります。それぞれ使い道が違います。見た目が似ていても、目的が違うんです。ここでは、ファイルセクション・作業場所セクション・連絡場所セクションについて分かりやすく紹介します。
ファイルセクション(FILE SECTION):外部ファイルとの窓口
ファイルセクションは、外部のファイルとプログラムをつなぐ窓口のような場所です。プログラムの中で直接ファイルを読み書きするわけではなく、まずここで「どんなファイルを使いますよ」と宣言します。
たとえば、売上データを記録したCSVファイルを扱うときは、以下のように書きます。
FD 売上ファイル LABEL RECORDS ARE STANDARD DATA RECORD IS 売上レコード. 01 売上レコード. 05 商品コード PIC X(10). 05 単価 PIC 9(5). 05 数量 PIC 9(3).
FD(ファイル記述)では、ファイル名や構造を宣言します。その下に01レベルで、1行(レコード)の中身を定義する形です。CSVファイルの1行=レコード1つ、という感じで覚えておくとイメージしやすいです。
作業場所セクション(WORKING-STORAGE SECTION):プログラム内の作業スペース
作業場所セクションは、プログラムが一時的にデータを保管したり計算したりするための作業台です。データを出し入れしながら、いろいろな処理をここで行います。
たとえば、合計金額を計算したり、フラグとして使う値を用意したり、画面に表示するための項目を準備したりします。
77 合計金額 PIC 9(7)V99. 01 顧客情報. 05 氏名 PIC X(20). 05 年齢 PIC 9(3).
「77レベル」は独立した1つの項目を定義したいときに使います。「01レベル」は複数の情報をひとまとめにしたいときに便利です。たとえば、顧客情報を1つのかたまりにして扱いたい場合などですね。
使用頻度が圧倒的に高く、COBOLを書くときには必ずと言っていいほど登場します。書き慣れてくると、自分だけの作業台を組み立てるような感覚になります。
連絡場所セクション(LINKAGE SECTION):プログラム間のデータの橋渡し
連絡場所セクションは、別のプログラムからデータを受け取るための専用通路です。メインのプログラムと、CALLで呼び出した別のプログラム(サブルーチン)が、データをやりとりする際に使います。
直接使う機会は少ないかもしれませんが、企業向けのCOBOLシステムではよく登場します。役割だけ押さえておけばOKです。
LINKAGE SECTION. 01 入力パラメータ. 05 社員番号 PIC X(6). 05 部署コード PIC X(3).
連絡場所で定義された項目は、CALL文のUSING句を使ってメインプログラムから渡されます。ここでは深掘りせず、“プログラムとプログラムをつなぐ通路なんだな”くらいの理解で大丈夫です。
COBOL データ部の核心!データ項目定義の詳細な書き方【具体例満載】
COBOLのデータ定義では、いくつかの基本パーツを組み合わせることで、正確なデータ構造ができあがります。まるでパズルのピースをはめ込むように、ルール通りに並べていくだけで完成します。
ここではレベル番号、データ名、PICTURE句、VALUE句の4つにしぼって、それぞれの意味と使い方をやさしく解説します。
レベル番号(01, 02-49, 77, 88):データの階層構造を示す設計図
レベル番号は、データ項目の「位置関係」を示す番号です。言ってみればデータの住所。階層構造を表すために使われます。
たとえば、こんな風に書かれていたら、親と子の関係が一目瞭然です。
01 顧客情報. 05 氏名 PIC X(20). 05 年齢 PIC 9(3). 05 住所情報. 10 郵便番号 PIC X(8). 10 都道府県 PIC X(10).
インデントが深くなるほど、より細かいデータということになります。
- 01レベル:レコードや大きなまとまりの開始
- 02〜49レベル:01の中に含まれる小さな項目
- 77レベル:独立している単体の項目(親子関係なし)
- 88レベル:特定の値に名前をつける条件名レベル
77 合計金額 PIC 9(7)V99. 01 ステータスフラグ PIC X(1). 88 正常 VALUE 'N'. 88 異常 VALUE 'E'.
88レベルは条件判定をわかりやすくするための便利機能です。
データ名(変数名):分かりやすさが命!命名規則とコツ
データ名は、プログラム内で扱う値にラベルをつけるイメージです。意味が伝わる名前をつけることで、読みやすさとメンテナンスのしやすさがアップします。
命名にはいくつかのルールがあります。
- 英数字とハイフン(-)のみ使用可
- 先頭はアルファベット
- 31文字以内
- 記号やスペースは使えない
見た目が似ていても、読み手に伝わるかどうかで全然違います。
悪い例:
01 A. 05 B PIC 9(5).
良い例:
01 顧客情報. 05 顧客番号 PIC 9(5).
用途や役割を先頭につける(例:金額なら「金額_」)という工夫も効果的です。
PICTURE句(PIC句):データの型と桁数を決める!最重要項目をマスター
PICTURE句は、データの「型」と「サイズ」を決める命令です。COBOLでは9は数字、Xは文字を表します。
記号 | 意味 |
---|---|
9 | 数字(0〜9) |
X | 文字(アルファベットや記号もOK) |
V | 小数点(実際には表示されない) |
S | 符号(+/−) |
05 商品コード PIC X(10). 05 単価 PIC 9(5)V99. 05 変動率 PIC S9(3)V9.
画面表示や帳票出力のときは編集記号も使えます。
- Z:ゼロを空白に
- -:マイナス記号
- .:小数点表示
- ¥:通貨記号
05 表示単価 PIC ZZ,ZZ9.99.
また、内部的な格納形式を指定するUSAGE句というものもあります。
05 税率 PIC 9(3)V9 USAGE BINARY. 05 重み PIC S9(5) COMP-3.
BINARYやPACKED-DECIMAL(COMP-3)は処理速度や容量を意識した使い方です。初心者のうちは無理に覚えなくても大丈夫です。
VALUE句:初期値を設定する便利な方法
VALUE句を使うと、データ項目に最初から値を入れておくことができます。
特にWORKING-STORAGE SECTIONで定数や初期化が必要なときに便利です。
77 初期メッセージ PIC X(20) VALUE '処理を開始します'. 77 初期金額 PIC 9(5) VALUE 0. 77 空白項目 PIC X(10) VALUE SPACE. 77 フラグ PIC X(1) VALUE 'N'.
文字はシングルクォート(')で囲います。数字はそのまま書いてOKです。
VALUE句を省略すると、中身が初期化されないこともあります。意図的に初期値を入れないと、不思議な動きをすることがあるので注意しましょう。
もっと複雑な使い方や制限事項については、別の記事で解説予定です。
【初心者必見】COBOL データ部で失敗しないための注意点と可読性を高めるコツ
COBOLのデータ部はシンプルに見えて、実は落とし穴がたくさんあります。特に初学者の頃は、ちょっとしたミスが大きなバグにつながることも珍しくありません。
ここではよくあるミスと、それを防ぐための工夫を紹介します。過去に「あれ?なんでこんな動きに…」と首をかしげた経験がある人は、思い当たる節もあるかもしれません。
データ部の落とし穴チェックリスト
- レベル番号のミス:親項目の下にいきなり77レベルを置いてしまう
- PICTURE句の桁数不足:9(3)で定義してるのに9999を入れて桁あふれ
- データ型の不一致:文字列なのにPIC 9で定義して表示が崩れる
- VALUE句の誤用:X(10)なのにVALUE 'こんにちはCOBOL!' で収まりきらない
- インデントがバラバラ:見た目がぐちゃぐちゃで読みにくい
こうしたミスは、焦って書いたときや、テンプレをコピペして微調整を忘れたときに起こりやすいです。
読みやすさ・保守しやすさを高めるコツ
自分が読むだけじゃなく、未来の自分や他人が見ても分かるように書いておくと、修正がラクになります。
- インデントの統一:階層がひと目で分かるように、スペースは2〜4つでそろえる
- データ名は意味を込める:金額なら「合計金額」、日付なら「請求日付」など
- コメントをしっかり書く:なぜその定義にしたのかを残しておくと後が楽
- まとめすぎない:1つのレコードに項目を詰め込みすぎると見落としやすくなる
- テスト用定数は明確に:初期値を入れる場合、コメントでテスト用と明記しておく
地味な工夫ですが、こうした積み重ねが大規模プログラムでは差になります。
01 顧客情報. *> 顧客の基本情報 05 顧客番号 PIC 9(5). 05 氏名 PIC X(20). 05 年齢 PIC 9(3). 05 登録区分 PIC X(1). *> 'N':新規, 'U':更新
「こう書けば誰が見ても迷わない」というスタイルを自分なりに作っていくのがコツです。
【まとめ】データ部を制する者はCOBOLを制す!
ここまで、COBOLのデータ部についてじっくり見てきました。構造を理解し、正確に定義できるようになると、プログラムの安定感がまるで違ってきます。
最初は「なんでこう書くんだろう?」と思う場面もあるかもしれません。でも意味とルールを知れば自然と腑に落ちてきます。
学んだ知識を定着させるには、とにかく手を動かしてみるのが一番です。
- 小さなデータ構造を自分で定義してみる
- 既存のプログラムのデータ部を読み解いてみる
- わざとミスをして動作の違いを試す
難しく感じたとしても心配はいりません。誰だって最初は間違えます。焦らず、楽しみながらひとつずつ覚えていきましょう。
「COBOLを覚えたいなら、まずはデータ部から!」と胸を張って言えるようになる日は、案外すぐそこです。
【関連記事】
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。