COBOL

データ定義と計算

PIC句でデータの形を決め、MOVEとCOMPUTEで値を扱います。

COBOL入門の講座一覧

01

レベル番号でデータを整理する

データ項目の先頭に書くレベル番号は、項目の階層を表します。01は大きなレコードやグループ、05や10はその中の項目として使います。単独の作業項目でも01を使えます。

レコードを定義するCOBOL
01 CUSTOMER-RECORD.
    05 CUSTOMER-ID   PIC 9(5).
    05 CUSTOMER-NAME PIC X(20).

この定義では、CUSTOMER-RECORDの中にIDと名前が入ります。入力ファイルの1行や帳票の1行を、複数の項目からなるレコードとして表すときに便利です。

02

PIC句で種類と桁数を決める

PIC X(n)は文字をn桁、PIC 9(n)は数字をn桁持つ定義です。符号付き数値にはS、小数点の位置にはVを使います。

文字、整数、小数COBOL
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 "残高は編集項目で表示します。".
実行結果の例OUTPUT
名前=Mity
年齢=020
倍率の格納値=125
残高は編集項目で表示します。

数値項目は内部的な桁数を持つため、表示時に先頭の0が出ることがあります。帳票用に見た目を整える場合は、このページの「編集用PIC」節で扱う編集項目を使います。

03

編集用PICで見やすく表示する

計算用の項目と表示用の項目を分けると、暗黙小数点を実際の小数点として表示できます。編集用PICでは、.で小数点を表示し、-で符号を表示します。

計算用の値を表示用へ移すCOBOL
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.
実行結果OUTPUT
倍率=1.25
残高=-01200.50

Zを使う編集用PIC(例:-ZZZZ9.99)なら、先頭の0を空白へ置き換える表示もできます。計算用の項目を直接帳票へ出すのではなく、用途に合わせた編集項目へMOVEするのが基本です。

04

MOVEで値を転記する

MOVEは、右側の値を左側のデータ項目へ移します。代入の向きは「右から左」なので、MOVE 100 TO PRICEと書きます。

値を更新するCOBOL
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 "円".
実行結果OUTPUT
税込価格: 01280円

文字列を短い項目へ移すと、長い部分が切り捨てられることがあります。項目の桁数が十分か、移す前に確認する習慣をつけましょう。

05

COMPUTEで計算する

ADD、SUBTRACT、MULTIPLY、DIVIDEのほか、式をまとめて書けるCOMPUTEがあります。

税額と合計を計算するCOBOL
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 "円".
実行結果OUTPUT
合計: 0002750円

計算結果を保存する項目の桁数が小さいと、値が収まらない可能性があります。金額の最大値を先に見積もり、余裕を持った桁数を定義します。

06

小数点と符号を確認する

Vは暗黙の小数点です。PIC 9(3)V99なら、整数3桁と小数2桁を持ちます。表示用の実際の小数点は編集項目で表す場合があるため、計算用の定義と表示用の定義を分けて考えます。

数値項目へ文字を入れない

PIC 9へ文字をMOVEすると、期待した計算ができません。金額、数量、日付などは、文字列として扱うのか数値として扱うのかを最初に決めます。

07

練習

商品の単価1280円、数量3個から小計を計算し、COMPUTEで表示してください。次に税額小計 × 10 ÷ 100を計算し、税込合計を表示します。

数量を0、単価を99999へ変更したとき、計算結果が定義した桁数へ収まるかも確認しましょう。