[COBOLのはじめ方] Part7: DATA DIVISIONとデータ定義(PIC句)

COBOL
“`html

こんにちは!😊 COBOL学習のStep 2へようこそ!前回はENVIRONMENT DIVISIONの基本について学びましたね。今回は、COBOLプログラムでデータを扱うための重要な領域、DATA DIVISIONとその中核となるデータ定義(PIC句)について詳しく見ていきましょう。

プログラムはデータを処理するために存在します。COBOLでは、どのようなデータを、どのような形式で、どれくらいの大きさで扱うかを事前にきっちり定義する必要があります。その役割を担うのがDATA DIVISIONです。

DATA DIVISIONの役割

DATA DIVISIONは、プログラム内で使用するすべてのデータ項目(変数や定数、ファイルレコードなど)を定義するための部です。ここで定義されていないデータ項目をPROCEDURE DIVISIONで使用することはできません。

DATA DIVISIONは、さらにいくつかのセクション(SECTION)に分かれています。主なセクションは以下の通りです。

  • FILE SECTION: ファイル処理で使用するデータ構造(レコード)を定義します。ファイルの入出力に関連するデータを扱います。(Step 4で詳しく学びます)
  • WORKING-STORAGE SECTION: プログラム内部で一時的に使用する変数や定数、作業領域などを定義します。今回の主役です!✨
  • LINKAGE SECTION: 他のプログラム(サブルーチン)との間でデータをやり取りするための領域を定義します。(Step 5で詳しく学びます)

今回は、特にWORKING-STORAGE SECTIONに焦点を当てて、データ定義の方法を学んでいきましょう。

WORKING-STORAGE SECTIONとデータ定義

WORKING-STORAGE SECTIONでは、プログラムの処理に必要な様々なデータ項目を定義します。データ定義は、レベル番号データ項目名、そしてPIC句(PICTURE句)などの句を組み合わせて行います。

レベル番号

データ項目は階層構造で定義できます。レベル番号はその階層を示す数字です。

  • 01: 階層の最上位を示します。レコードや独立したデータ項目を定義する際に使用します。
  • 02 から 49: 上位のデータ項目に従属する、より細かいデータ項目を定義する際に使用します。数字が大きいほど下位の階層になります。
  • 77: (旧式の書き方) 階層構造を持たない独立した基本項目を定義します。現在は01レベルで定義することが一般的です。
  • 88: 条件名を定義します。特定の花の値に名前を付けることができます。(少し応用的な内容です)

データ項目名

定義するデータ項目(変数名など)の名前です。COBOLの命名規則に従って、分かりやすい名前を付けましょう。(例: `WK-NAME`, `WK-COUNT`, `CUSTOMER-RECORD` など)

PIC句 (PICTURE句) ★今回の最重要ポイント★

PIC句とは?

PIC句は、データ項目の桁数(サイズ)を指定するための句です。PICTURE IS または省略形の PIC に続けて、データ型と桁数を示すピクチャ文字列を記述します。

ピクチャ文字列には、特定の意味を持つ文字(ピクチャ文字)を使用します。よく使われるピクチャ文字をいくつか見てみましょう。📊

ピクチャ文字意味データ型説明
9数字数字項目PIC 9(5)5桁の数字 (例: 12345)
X英数字英数字項目PIC X(10)10桁の英数字 (例: ABC123XYZ)
A英字英字項目PIC A(8)8桁の英字 (例: COBOLABC) ※ Xの方が汎用性が高くよく使われます
S符号数字項目PIC S9(5)符号付き (+/-) 5桁の数字 (例: +12345, -00010) ※ 必ず先頭に記述
V暗黙の小数点数字項目PIC 9(3)V9(2)整数部3桁、小数部2桁の数字 (データ内部に小数点は持たない 例: 12345 は 123.45 として扱われる)
P暗黙の10のべき乗数字項目PIC 9(3)PP3桁の数字に100を掛けた値 (例: 123 は 12300 として扱われる) ※ 主に桁合わせに使用
Z先行ゼロ抑制数字編集項目PIC ZZZZ9先行するゼロをスペースに置き換える (例: 00123 は ” 123″ になる)
.実小数点数字編集項目PIC 9(3).9(2)小数点を表示 (例: 123.45)
,カンマ数字編集項目PIC 999,999カンマを挿入 (例: 123,456)
+, -符号表示数字編集項目PIC +9(5) / PIC -9(5)正負の符号を表示 (例: +12345 / -00123 )
$通貨記号数字編集項目PIC $$,$$$,$$9.99通貨記号を表示 (フローティング表示も可能 例: $1,234.56)

注意: 数字編集項目は、主に表示や印刷用に使われ、計算には直接使用できません。計算は数字項目で行い、結果を数字編集項目に転記(MOVE)して表示します。

VALUE句

データ項目に初期値を設定したい場合は、VALUE句を使用します。


       01 WK-COUNTER    PIC 9(3) VALUE 0.  *> 3桁の数字項目 WK-COUNTER に初期値 0 を設定
       01 WK-MESSAGE   PIC X(10) VALUE 'HELLO'. *> 10桁の英数字項目 WK-MESSAGE に初期値 'HELLO' を設定 (残りはスペース)
       01 WK-FLAG      PIC X(1) VALUE SPACE. *> 1桁の英数字項目 WK-FLAG に初期値 スペース を設定
    

例: WORKING-STORAGE SECTIONでの定義

それでは、実際にWORKING-STORAGE SECTIONでデータ項目を定義する例を見てみましょう。💻


IDENTIFICATION DIVISION.
PROGRAM-ID. DATA-SAMPLE.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
* ここでは環境系の設定は省略します
DATA DIVISION.
WORKING-STORAGE SECTION.
*-- 独立したデータ項目の定義 --*
01 WK-USER-NAME       PIC X(20) VALUE SPACES.       *> ユーザー名 (英数字20桁、初期値スペース)
01 WK-AGE             PIC 9(3) VALUE ZEROS.         *> 年齢 (数字3桁、初期値0)
01 WK-TOTAL-PRICE     PIC S9(7)V9(2) VALUE +0.      *> 合計金額 (符号付き、整数部7桁、小数部2桁、初期値0)

*-- 構造化されたデータ項目の定義 (集団項目と基本項目) --*
01 CUSTOMER-INFO.
   05 CUSTOMER-ID     PIC 9(8).                    *> 顧客ID (数字8桁)
   05 CUSTOMER-NAME.
      10 FAMILY-NAME  PIC X(10).                   *> 姓 (英数字10桁)
      10 FIRST-NAME   PIC X(10).                   *> 名 (英数字10桁)
   05 CUSTOMER-TEL    PIC X(11).                   *> 電話番号 (英数字11桁 - ハイフン等含む)
   05 REGISTER-DATE.
      10 REG-YEAR     PIC 9(4).                    *> 登録年 (数字4桁)
      10 REG-MONTH    PIC 9(2).                    *> 登録月 (数字2桁)
      10 REG-DAY      PIC 9(2).                    *> 登録日 (数字2桁)

*-- 表示用のデータ項目 (数字編集項目) --*
01 PRINT-AGE          PIC ZZ9.                      *> 年齢表示用 (先行ゼロ抑制)
01 PRINT-TOTAL-PRICE  PIC --,---,---.99.            *> 金額表示用 (-, カンマ, 小数点)

PROCEDURE DIVISION.
* ここに処理を記述します (今回は省略)
    STOP RUN.
    

この例では、独立した項目(WK-USER-NAMEなど)と、階層構造を持つ項目(CUSTOMER-INFO)を定義しています。CUSTOMER-INFO01レベルの集団項目で、その下に05レベルや10レベルの基本項目が定義されています。

また、計算結果を表示するために、数字編集項目(PRINT-AGE, PRINT-TOTAL-PRICE)も定義しています。

まとめ

今回はCOBOLのDATA DIVISION、特にWORKING-STORAGE SECTIONにおけるデータ定義と、その中心となるPIC句について学びました。
  • DATA DIVISIONは、プログラムで使うデータを定義する場所。
  • WORKING-STORAGE SECTIONは、プログラム内部で使う変数などを定義する主要なセクション。
  • レベル番号でデータの階層構造を示す。
  • PIC句でデータの桁数を指定する。9 (数字), X (英数字), S (符号), V (暗黙の小数点) など、様々なピクチャ文字がある。
  • 数字編集項目 (Z, ., , など) は表示用に使われる。
  • VALUE句で初期値を設定できる。
データ定義はCOBOLプログラミングの基礎であり、非常に重要です。PIC句の様々な使い方を理解し、適切にデータを定義できるようになりましょう!💪

次回は、いよいよプログラムの処理を記述するPROCEDURE DIVISIONの基本的な書き方と実行について学びます。お楽しみに!🚀

参考情報

より詳しく知りたい場合は、以下の情報源も参考にしてみてください。

  • GnuCOBOL (旧OpenCOBOL): オープンソースのCOBOLコンパイラです。公式ドキュメント等で詳細な文法を確認できます。(具体的なURLは検索エンジンで「GnuCOBOL documentation」等と検索してください)
  • COBOL入門サイトや書籍: 初学者向けの解説が豊富にあります。(オンライン検索や書店で探してみてください)
“`

コメント

タイトルとURLをコピーしました