【COBOL学習|初心者向け】COBOLの鉄則!「NUMERIC」判定で計算エラー(アベンド)を未然に防ぐ

導入:なぜ「NUMERIC」判定が重要なのか

COBOLプログラムを開発する際、最も恐ろしいのは実行時エラー、いわゆる「アベンド(異常終了)」です。特に、数値計算を行う項目に、誤って英字やスペースなどの「数字以外のデータ」が紛れ込んでいた場合、システムは計算不能に陥り、即座に停止してしまいます。
これを防ぐための「生命線」となるのが、今回解説する「NUMERIC クラス判定」です。この機能を活用することで、計算前にデータの安全性を確認し、堅牢なシステムを構築することができます。

基礎知識:NUMERIC判定とは何か

NUMERIC判定とは、あるデータ項目の中身が「0から9の数字だけで構成されているか」を、プログラムの実行時にチェックする仕組みです。
COBOLでは、たとえ項目定義が「X(英数字)」であっても、その中に数字が入っていれば計算が可能です。しかし、もしそこに「A」や「 」(スペース)が入っていると、計算命令を実行した瞬間にアベンドが発生します。
「IF データ名 IS NUMERIC」という構文を使うことで、処理を進めても安全かどうかをプログラム自身に判断させることができるのです。

実装:安全なデータ処理のステップ

1. 入力データ(ファイルや画面から受け取った値)を準備する。
2. 計算処理を行う前に、「IF … IS NUMERIC」を使って判定を行う。
3. 数字であれば計算処理を実行し、数字でなければエラーメッセージを表示する、あるいはログに出力して処理をスキップする。
この手順を踏むだけで、不正なデータによるシステムダウンを回避できます。

サンプルプログラム

以下のサンプルは、入力されたデータが数値かどうかを判定し、計算可能かをチェックする簡単なコードです。

IDENTIFICATION DIVISION.
PROGRAM-ID. CHECK-NUMERIC.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-INPUT-DATA PIC X(5) VALUE “123A5”.
01 WS-NUMERIC-VAL PIC 9(5).

PROCEDURE DIVISION.
> 入力データが数字のみで構成されているか判定する
IF WS-INPUT-DATA IS NUMERIC THEN
MOVE WS-INPUT-DATA TO WS-NUMERIC-VAL
DISPLAY “計算可能です: ” WS-NUMERIC-VAL
ELSE
> 数字以外の文字が含まれている場合はここへ分岐する
DISPLAY “エラー: 数値以外の文字が含まれています [” WS-INPUT-DATA “]”
END-IF.

STOP RUN.

応用・注意点:現場で役立つアドバイス

現場でよくある失敗として、「符号」の扱いがあります。
実は、NUMERIC判定は「符号(プラスやマイナス)」が含まれていると、定義によっては「数字ではない」とみなされることがあります。
また、「スペース」は数字として判定されません。入力値が未入力(スペース)の場合もエラーとして判定されますので、バリデーションを行う際は「入力必須チェック」と「NUMERICチェック」を組み合わせるのが実務の定石です。

プログラムが複雑になればなるほど、こうした「入り口でのチェック」がシステムの安定性を支えます。ぜひ、計算処理の前には必ずこの判定を入れる癖をつけてくださいね。

コメント

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