COBOLの編集記述子を完全ガイド!初心者でもわかるPIC Z・*・$の使い方
生徒
「COBOLで数字を見やすく表示する方法ってありますか?」
先生
「はい、COBOLでは『編集記述子』という仕組みを使って、数字を整えて表示することができますよ。」
生徒
「編集記述子って何ですか?使い方も知りたいです。」
先生
「それでは、PIC Z やアスタリスク(*)、ドル記号($)など、基本的な編集記述子の使い方を一緒に学んでいきましょう!」
1. 編集記述子とは?
COBOLの編集記述子とは、プログラム内で数値を表示する際に、桁数や表示形式を整えるための文字や記号のことです。COBOLではPIC句(ピクく)を使ってデータの表示形式を指定します。
例えば、数字の頭にゼロを表示したくなかったり、カンマやドル記号を付けたいときに使います。こうした装飾を施すことで、見やすく分かりやすい出力ができるようになります。
2. PIC Z の基本
PIC Z
は、数値の左側にある不要なゼロ(0)を表示しないための記述子です。たとえば、金額を表示する際に、000123 のようなゼロは不要ですよね。そんなときに便利なのが Z です。
例えば、次のような記述を見てください。
01 KINGAKU PIC 9(5) VALUE 23.
01 HYOUJI PIC Z(5).
...
MOVE KINGAKU TO HYOUJI
DISPLAY HYOUJI
このときの出力結果は以下のようになります。
23
本来「00023」となるところを、「Z」にしたことで左側のゼロが空白になっています。
3. アスタリスク(*)の使い方
*(アスタリスク)
は、Zと似ていますが、ゼロをアスタリスクに置き換えて表示します。これは通帳や請求書などで金額を隠すときに使われる形式です。
たとえば、以下のように書きます。
01 KINGAKU PIC 9(5) VALUE 23.
01 HYOUJI PIC **,**9.
...
MOVE KINGAKU TO HYOUJI
DISPLAY HYOUJI
実行結果は次のようになります。
**,**3
このように、左側のゼロ部分は「*」に置き換えられています。
請求書で「***123」といった表記を見たことがある人もいると思いますが、それをCOBOLで再現できるわけです。
4. ドル記号($)の使い方
$(ドル記号)
は、数値の前に通貨記号(ドルや円)を表示するための記述子です。金額の先頭に自動でドル記号を配置できます。
01 KINGAKU PIC 9(5) VALUE 2300.
01 HYOUJI PIC $ZZ,ZZ9.
...
MOVE KINGAKU TO HYOUJI
DISPLAY HYOUJI
実行結果は以下のようになります。
$ 2,300
「$ZZ,ZZ9」と書くことで、「$ 2,300」という分かりやすい表記になります。ドルでなく円やユーロの記号は自動では表示されないので、必要に応じてDISPLAY文の前後で記号を追加する方法もあります。
5. 編集記述子の組み合わせ
これらの編集記述子は、単独だけでなく組み合わせて使うこともできます。たとえば、左側のゼロを空白にした上で、金額にカンマやドル記号をつけたいときはこうします。
01 KINGAKU PIC 9(6) VALUE 7890.
01 HYOUJI PIC $ZZ,ZZZ.
...
MOVE KINGAKU TO HYOUJI
DISPLAY HYOUJI
実行結果:
$ 7,890
「Z」は不要なゼロを空白に、「,(カンマ)」は3桁区切りに、「$」は通貨記号に、それぞれ役割があります。見た目の整った金額表示が簡単に実現できます。
6. よくある間違いと注意点
編集記述子を使うときに注意するポイントもあります。
- カンマ(,)やドル記号($)の位置:カンマは桁を正しく区切る位置に置かないと表示が崩れます。
- 表示する数値よりPICの桁数が小さいと、正しく表示されません。
- Zや*は数字以外のデータ(文字列など)には使えません。
たとえば、「PIC Z(3)」に9999を入れようとすると、桁数オーバーでエラーになります。このような場合は「PIC Z(4)」などにして、十分な桁数を確保する必要があります。
7. 実際の業務での活用例
編集記述子は、実際の業務プログラムでも頻繁に使われます。銀行の通帳印字、給与明細、請求書、会計帳簿など、数字を美しく整える必要がある場面で活躍します。
たとえば、下記のように請求書で金額を整えるコードが書かれます。
01 SHOUHIN-KINGAKU PIC 9(6) VALUE 123456.
01 PRINT-DATA PIC $**,***.
...
MOVE SHOUHIN-KINGAKU TO PRINT-DATA
DISPLAY PRINT-DATA
出力結果:
$**123,456
このように、読みやすく、間違いにくい出力が可能になります。