レベル番号でデータを整理する
データ項目の先頭に書くレベル番号は、項目の階層を表します。01は大きなレコードやグループ、05や10はその中の項目として使います。単独の作業項目でも01を使えます。
01 CUSTOMER-RECORD.
05 CUSTOMER-ID PIC 9(5).
05 CUSTOMER-NAME PIC X(20).この定義では、CUSTOMER-RECORDの中にIDと名前が入ります。入力ファイルの1行や帳票の1行を、複数の項目からなるレコードとして表すときに便利です。
PIC句で種類と桁数を決める
PIC X(n)は文字をn桁、PIC 9(n)は数字をn桁持つ定義です。符号付き数値にはS、小数点の位置にはVを使います。
01 PERSON-NAME PIC X(10) VALUE "Mity".
01 AGE PIC 9(3) VALUE 20.
01 RATE PIC 9V99 VALUE 1.25.
01 BALANCE PIC S9(5)V99 VALUE -1200.50.
DISPLAY "名前=" FUNCTION TRIM(PERSON-NAME).
DISPLAY "年齢=" AGE.
DISPLAY "倍率の格納値=" RATE.
DISPLAY "残高は編集項目で表示します。".名前=Mity
年齢=020
倍率の格納値=125
残高は編集項目で表示します。数値項目は内部的な桁数を持つため、表示時に先頭の0が出ることがあります。帳票用に見た目を整える場合は、このページの「編集用PIC」節で扱う編集項目を使います。
編集用PICで見やすく表示する
計算用の項目と表示用の項目を分けると、暗黙小数点を実際の小数点として表示できます。編集用PICでは、.で小数点を表示し、-で符号を表示します。
01 RATE PIC 9V99 VALUE 1.25.
01 BALANCE PIC S9(5)V99 VALUE -1200.50.
01 RATE-OUT PIC 9.99.
01 BALANCE-OUT PIC -9(5).99.
MOVE RATE TO RATE-OUT.
MOVE BALANCE TO BALANCE-OUT.
DISPLAY "倍率=" RATE-OUT.
DISPLAY "残高=" BALANCE-OUT.倍率=1.25
残高=-01200.50Zを使う編集用PIC(例:-ZZZZ9.99)なら、先頭の0を空白へ置き換える表示もできます。計算用の項目を直接帳票へ出すのではなく、用途に合わせた編集項目へMOVEするのが基本です。
MOVEで値を転記する
MOVEは、右側の値を左側のデータ項目へ移します。代入の向きは「右から左」なので、MOVE 100 TO PRICEと書きます。
01 PRICE PIC 9(5) VALUE 0.
01 MSG-TEXT PIC X(12).
MOVE 1280 TO PRICE.
MOVE "税込価格" TO MSG-TEXT.
DISPLAY MSG-TEXT ": " PRICE "円".税込価格: 01280円文字列を短い項目へ移すと、長い部分が切り捨てられることがあります。項目の桁数が十分か、移す前に確認する習慣をつけましょう。
COMPUTEで計算する
ADD、SUBTRACT、MULTIPLY、DIVIDEのほか、式をまとめて書けるCOMPUTEがあります。
01 PRICE PIC 9(6) VALUE 2500.
01 TAX PIC 9(6) VALUE 250.
01 TOTAL PIC 9(7).
COMPUTE TOTAL = PRICE + TAX.
DISPLAY "合計: " TOTAL "円".合計: 0002750円計算結果を保存する項目の桁数が小さいと、値が収まらない可能性があります。金額の最大値を先に見積もり、余裕を持った桁数を定義します。
小数点と符号を確認する
Vは暗黙の小数点です。PIC 9(3)V99なら、整数3桁と小数2桁を持ちます。表示用の実際の小数点は編集項目で表す場合があるため、計算用の定義と表示用の定義を分けて考えます。
PIC 9へ文字をMOVEすると、期待した計算ができません。金額、数量、日付などは、文字列として扱うのか数値として扱うのかを最初に決めます。
練習
商品の単価1280円、数量3個から小計を計算し、COMPUTEで表示してください。次に税額小計 × 10 ÷ 100を計算し、税込合計を表示します。
数量を0、単価を99999へ変更したとき、計算結果が定義した桁数へ収まるかも確認しましょう。
