本文へスキップ
BecomeCoder

COBOLコース · 第10章 実務のCOBOL ― パック10進・帳票・メインフレーム · レッスン50

帳票を作る ― 編集記号(Z, カンマ, 通貨記号)で見た目を整える

ローカル実施

導入

計算した金額をそのまま DISPLAY すると、0001234500 のように先頭の0が並んだ、読みにくい表示になってしまいます。実務の帳票(レポート・請求書など)では、人間が読みやすい見た目に整える必要があります。COBOLにはこのための専用の記号——**編集記号(エディットピクチャ)**が用意されています。

説明

       01  WS-AMOUNT            PIC 9(7)V99   VALUE 1234500.
       01  WS-AMOUNT-EDIT       PIC ZZZ,ZZ9.99.

       PROCEDURE DIVISION.
           MOVE WS-AMOUNT TO WS-AMOUNT-EDIT.
           DISPLAY WS-AMOUNT-EDIT.
      *>  結果: " 12,345.00"(先頭のゼロが空白になり、桁区切りのカンマが入る)

代表的な編集記号をまとめます。

記号意味
Z先頭の不要なゼロを空白に置き換える(ゼロサプレス)
,3桁ごとの桁区切り(カンマ)
.小数点(実際に表示される記号としての小数点)
$通貨記号(先頭に付ける)
-マイナス符号(負の値のときだけ表示)
*先頭の空白の代わりにアスタリスクで埋める(小切手などの偽造防止に使われた)

いくつか例を見てみましょう。

       01  WS-PRICE-EDIT        PIC $ZZZ,ZZ9.99.
      *>  1234500 → "$12,345.00"

       01  WS-DIFF-EDIT         PIC -ZZZ,ZZ9.
      *>  マイナスの値なら "-1,234"、プラスなら空白で "    1,234"

       01  WS-CHECK-EDIT        PIC $***,**9.99.
      *>  1234500 → "$**12,345.00"(空いた桁をアスタリスクで埋める)

このような、表示専用の見た目を持つ項目を 編集項目(edited item) と呼びます。重要なのは、編集項目は計算には使わず、あくまで表示専用として扱うという設計です。実際の計算はレッスン49で見たような通常の数値項目(PIC 9(7)V99 など)で行い、その結果を最後に MOVE で編集項目へ移して初めて、見やすい形の文字列に変換されます。

      *> 典型的な流れ
           COMPUTE WS-TOTAL = WS-PRICE * WS-QTY.        *> 計算は数値項目で
           MOVE WS-TOTAL TO WS-TOTAL-EDIT.                *> 表示用に編集項目へ
           DISPLAY WS-TOTAL-EDIT.                         *> 見やすく表示

このMOVEの瞬間に、COBOLが自動的にゼロサプレスやカンマの挿入を行ってくれます。プログラマが自分で「桁区切りを入れる文字列処理」を書く必要がない——これがPICTURE句による編集記号の大きな利点です。請求書や給与明細のような、金額を人間向けに整形して出力する帳票処理で、この仕組みは今も広く使われています。

試すには

1234567 という値を持つ PIC 9(7) の項目を、PIC ZZZ,ZZZ,Z99PIC $Z,ZZZ,ZZ9.99 のような編集項目へMOVEしたら、どんな見た目の文字列になるか予想してから、実際にPlaygroundで確認してみましょう。