【PL/I学習|初心者向け】メインフレーム技術者が教える!「VERIFY関数」で入力チェックをスマートにこなす方法

1. 導入:なぜVERIFY関数が重要なのか

メインフレームのCOBOLプログラム開発において、画面やファイルからの入力データが「期待した形式か」を確認することは、バグを未然に防ぐための最重要工程です。初心者のうちは、IF文を何行も重ねて「0か? 1か? 2か?…」と判定しがちですが、これではコードが冗長になり、メンテナンスも大変です。ここで活躍するのが「VERIFY関数」です。この関数を使えば、入力チェックを一行でスマートに記述でき、プログラムの可読性が劇的に向上します。

2. 基礎知識:VERIFY関数とは何か

VERIFY関数は、対象となる文字列の中に「許可されていない文字」が含まれているかを調べるための関数です。
・仕組み:指定した文字列(照合セット)の中に、対象データが含まれているかを一文字ずつ確認します。
・戻り値:許可されていない文字が最初に見つかった「位置」を返します。もしすべての文字が許可範囲内であれば「0」を返します。
つまり、戻り値が「0以外」であれば、「不正なデータが混入している」と判断できるのです。

3. 実装・解決策

例えば、「数字のみで構成されているか」をチェックする場合、従来のように一文字ずつループで回す必要はありません。VERIFY関数の第1引数に対象項目を、第2引数に「0123456789」という文字列を指定するだけで、数字以外の文字がどこにあるかを一発で特定できます。これにより、バリデーション処理が非常にシンプルになります。

4. サンプルプログラム

以下のコードは、入力データが数字のみで構成されているかをチェックする実用的な例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. CHECK-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 INPUT-DATA PIC X(10) VALUE ‘12345A6789’.
01 CHECK-RESULT PIC 9(02).

PROCEDURE DIVISION.
> VERIFY関数で数字(0-9)以外の文字が含まれているか確認します
> 戻り値が0より大きい場合、数字以外の文字が含まれていると判断します
COMPUTE CHECK-RESULT = FUNCTION VERIFY(INPUT-DATA, ‘0123456789’)

IF CHECK-RESULT > 0 THEN
DISPLAY ‘エラー: 数字以外の文字が含まれています。位置: ‘ CHECK-RESULT
ELSE
DISPLAY ‘正常: 全て数字です。’
END-IF.

GOBACK.

5. 応用・注意点

現場で活用する際のポイントをいくつか挙げます。
空白の取り扱い:もし「数字と空白」を許可したい場合は、第2引数にスペースを含めて ‘ 0123456789’ と指定してください。これを忘れると、空文字すらエラー扱いになってしまいます。
現代言語への移行:将来的にメインフレームからオープン系(JavaやPythonなど)へ移行する場合、この処理は「正規表現(RegEx)」に置き換えるのが定石です。VERIFY関数は「単純な文字の許可リスト判定」に特化しているため、移行時は「正規表現のパターンマッチング」へ変換すると、より柔軟なバリデーションが可能になります。

まずは現在の保守業務で、IF文がズラリと並んでいる箇所を見つけたら、このVERIFY関数に書き換えられないか検討してみてください。コードが驚くほどスッキリしますよ。

コメント

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