導入
計算した金額をそのまま 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,Z99 や PIC $Z,ZZZ,ZZ9.99 のような編集項目へMOVEしたら、どんな見た目の文字列になるか予想してから、実際にPlaygroundで確認してみましょう。