【COBOL学習|豆知識】報告書作成の秘訣!VALUE句で固定文字列を自在に操る

導入

報告書を作成する際、見出しや区切り線、項目名といった「決まった文字列」を印字する場面は非常に多いですよね。これらの固定文字列を効率的に定義し、報告書の見栄えを整えるために、COBOLの`VALUE`句は強力な味方となります。`VALUE`句を使いこなすことで、コードの見通しが良くなり、メンテナンス性も向上します。今回は、特に`REPORT SECTION`内で`VALUE`句を使って固定文字列を定義する方法に焦点を当て、その重要性と具体的な使い方を解説します。

基礎知識

`REPORT SECTION`は、COBOLで報告書を整形して出力するための機能を提供します。このセクションでは、`REPORT WRITER`という機能を利用して、報告書のレイアウトを定義します。

  • 報告書 (Report): 出力される一連のデータ。
  • 報告書記述項 (Report Description Entry): 報告書の全体的な構造や属性を定義します。
  • ページ定義項 (Page Description Entry): 1ページあたりの行数や用紙の幅などを定義します。
  • グループ記述項 (Group Description Entry): 報告書内の論理的なまとまり(ヘッダー、フッター、明細行など)を定義します。
  • データ記述項 (Data Description Entry): グループ記述項内で実際に印字される個々の項目を定義します。

`VALUE`句は、このデータ記述項の中で、その項目に固定的に割り当てる値を指定するために使われます。印字する文字そのもの(リテラル)を指定するイメージです。

実装/解決策

`REPORT SECTION`内で`VALUE`句を使用する基本的な流れは以下の通りです。

1. `REPORT SECTION`を定義します。
2. 報告書名(`REPORT`句で指定)と、それに付随する報告書記述項を定義します。
3. 印字したい箇所(例えば、報告書のヘッダー部分)に対応するグループ記述項を定義します。
4. そのグループ記述項の中に、固定文字列を表示するためのデータ記述項を定義します。
5. データ記述項の`PICTURE`句で表示するデータの型と長さを指定し、`VALUE`句で印字したい固定文字列を指定します。

例えば、「 合計 」という文字列を報告書のヘッダーに表示したい場合、以下のような記述になります。

01 HEADING-LINE.
05 FILLER PIC X(5).
05 TITLE-TEXT PIC X(10) VALUE “ 合計 “.
05 FILLER PIC X(5).

この例では、`TITLE-TEXT`というデータ項目に「 合計 」という固定文字列が割り当てられ、報告書で印字される際には常にこの文字列が表示されます。`FILLER`は、指定した文字列の前後にスペースなどを設けてレイアウトを調整するために使用されます。

サンプルプログラム

以下に、`REPORT SECTION`で`VALUE`句を使って固定文字列(見出し、区切り線、ラベル)を定義し、簡単な報告書を出力するサンプルプログラムを示します。

  • サンプルプログラム:REPORT SECTIONでのVALUE句の利用例


IDENTIFICATION DIVISION.
PROGRAM-ID. VALUE-REPORT-SAMPLE.
AUTHOR. ベテランCOBOL技術者.

REPORT SECTION.
—————————————————————-

  • 報告書記述項:報告書の全体的な定義

—————————————————————-
RD SAMPLE-REPORT
PAGE LIMIT IS 50 LINES
HEADING 1.
—————————————————————-

  • グループ記述項:報告書のヘッダー部分の定義

—————————————————————-
01 REPORT-HEADING.

  • 見出しのタイトルをVALUE句で定義

05 TITLE-LABEL PIC X(20) VALUE “— 売上集計レポート —“.

  • 区切り線をVALUE句で定義

05 DIVIDER-LINE PIC X(30) VALUE “==============================”.

  • 項目ラベルをVALUE句で定義

05 ITEM-LABEL PIC X(10) VALUE “商品名”.
05 VALUE-LABEL PIC X(10) VALUE “金額”.

—————————————————————-

  • グループ記述項:明細行の定義 (ここでは固定値で表示)

—————————————————————-
01 DETAIL-LINE.

  • 商品名 (固定値)

05 PRODUCT-NAME PIC X(10) VALUE “商品A”.

  • 金額 (固定値)

05 AMOUNT PIC X(10) VALUE “10000”.

—————————————————————-

  • グループ記述項:フッター部分の定義

—————————————————————-
01 REPORT-FOOTER.

  • 区切り線をVALUE句で定義

05 FOOTER-DIVIDER PIC X(30) VALUE “——————————“.

  • 締めのメッセージをVALUE句で定義

05 END-MESSAGE PIC X(15) VALUE “集計完了”.

PROCEDURE DIVISION.
—————————————————————-

  • メイン処理:報告書の生成と出力

—————————————————————-
MAIN-PROCEDURE.

  • 報告書を生成開始

OPEN OUTPUT SAMPLE-REPORT.

  • 報告書のヘッダーを出力 (自動的に出力される)
  • 明細行を2回出力

GENERATE DETAIL-LINE.
GENERATE DETAIL-LINE.

  • 報告書のフッターを出力 (自動的に出力される)
  • 報告書を生成終了

CLOSE SAMPLE-REPORT.

  • プログラム終了

STOP RUN.

このプログラムでは、`REPORT-HEADING`、`DETAIL-LINE`、`REPORT-FOOTER`といったグループ記述項の中で、`VALUE`句を用いて見出し、区切り線、項目ラベル、そして固定の明細データやメッセージを定義しています。`GENERATE`文が実行されるたびに、これらの定義に基づいて報告書が出力されます。

応用・注意点

  • レイアウト調整: `FILLER`句を効果的に使うことで、文字列間のスペースを調整し、見やすいレイアウトを作成できます。`PIC X(n)`で定義した後に`VALUE`句で指定する文字列の長さが`n`より短い場合、残りはスペースで埋められます。
  • 全角・半角混在: `VALUE`句には全角文字や半角文字を混在させて指定できます。ただし、`PICTURE`句の型 (`X`は任意の1バイト文字、`A`は英字、`N`は混在文字など) と正しく合わせることが重要です。
  • 実行時変更不可: `VALUE`句で定義された値は、プログラムの実行中には変更できません。もし実行時に値が変わる可能性がある場合は、`WORKING-STORAGE SECTION`で変数を定義し、それを`REPORT SECTION`で参照する形になります。
  • コメントの重要性: `VALUE`句で定義した文字列が何を表しているのか、コメントをしっかり記述しておくことが、後々の保守性を高める上で非常に重要です。

`VALUE`句は、報告書作成における「決まり文句」を記述するための基本中の基本です。これをマスターすることで、より洗練された報告書を効率的に作成できるようになります。ぜひ、日々のコーディングで活用してみてください。

コメント

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