【COBOL学習|実務向け】ベテランが教えるCOBOLの基本:PIC ‘9’(数字項目)の正しい扱いと落とし穴

1. 導入:なぜ今、PIC ‘9’を語るのか

COBOL開発において、最も頻繁に使用するのが数字項目「PIC 9」です。しかし、ベテランの視点から見ると、新人エンジニアが「単なる数字の箱」として安易に定義し、後に演算エラーやデータ異常で苦しむケースをよく目にします。本稿では、PIC 9の内部構造を理解し、実務で安全にデータを扱うための基本を再確認します。

2. 基礎知識:PIC ‘9’の役割と内部表現

PIC 9は「数字(0~9)」を保持するための定義です。重要なのは、USAGE句によってメモリ上の持ち方が劇的に変わるという点です。
デフォルトであるDISPLAY形式の場合、数字は「文字(キャラクタ)」として扱われます。例えば、PIC 9(3)であれば、メモリ上には3バイト分、文字コードとして値が格納されます。これが演算に回される際、COBOLのコンパイラは内部的に変換を行っています。この「変換コスト」と「データの型」を意識することが、バグのないコードを書く第一歩です。

3. 実装/解決策:適切な定義の使い分け

実務では、単なるカウンタならPIC 9(n)、計算に使用する数値ならCOMP-3(パック10進数)を検討するのが定石です。DISPLAY形式のPIC 9は、主に外部ファイルへの出力や、画面表示用のデータに適しています。また、符号が必要な場合は「S」を付加し、小数点が必要な場合は「V」を使用して位置を明示することを徹底してください。

4. サンプルプログラム

以下のコードは、数値の定義方法と、初期化の基本を示すサンプルです。

WORKING-STORAGE SECTION.

  • — 3桁の数字カウンタ(初期値は0) —

05 WS-COUNT PIC 9(03) VALUE 0.

  • — 符号付きの計算用項目(パック10進数) —

05 WS-TOTAL PIC S9(07)V99 COMP-3 VALUE 0.

  • — 文字列として扱う数字(コード変換用) —

05 WS-DATE-STR PIC 9(08) VALUE 20231027.

PROCEDURE DIVISION.
> カウンタの加算
ADD 1 TO WS-COUNT.

> 表示確認
DISPLAY “カウント値: ” WS-COUNT.
DISPLAY “日付文字列: ” WS-DATE-STR.

GOBACK.

5. 応用・注意点:現場で陥りやすい罠

現場で最も注意すべきは「非数値データ(スペースなど)の混入」です。
PIC 9項目に数値以外のデータが格納されている状態で計算処理を行うと、実行時に「データ例外(S0C7など)」が発生し、プログラムが異常終了します。
特に外部ファイルから取り込んだデータや、画面入力値を使用する際は、必ず IF WS-DATA IS NUMERIC という判定を行い、値が正当な数字であることを確認してから演算処理に回す癖をつけましょう。

また、PIC 9(n)に対して文字としての’A’などを転記できてしまう仕様(MOVE文)も、COBOL特有の危険な機能です。コンパイラのオプション設定や、数値チェックルーチンの活用が、システムの堅牢性を高める鍵となります。

コメント

タイトルとURLをコピーしました