【COBOL学習|豆知識】COBOLの「CLASS指定」で実現する、スマートな入力バリデーション術

1. 導入:なぜ「CLASS指定」が重要なのか

現場でシステム開発をしていると、「入力データが数字と特定の記号のみで構成されているかチェックしたい」という要件によく遭遇します。これまでのCOBOLでは、一文字ずつループで回してNUMERIC判定や文字コード判定を繰り返す……といった煩雑なコーディングをしがちでした。しかし、CLASS指定を使えば、独自の文字セットを定義し、たった一行のIF文で判定が完了します。コードの可読性が劇的に向上し、保守の手間も減る、まさにベテランの知恵と言える手法です。

2. 基礎知識:CLASS句とは何か

COBOLには、データの属性を判定するための「クラス条件」という仕組みがあります。通常、NUMERIC(数字)やALPHABETIC(英字)といった標準的なクラスはよく使われますが、SPECIAL-NAMES段落で独自の文字集合を定義することで、業務特有のバリデーションルールを作成できます。
「このフィールドは数字とハイフン、そしてアスタリスクしか許容しない」といった特定のルールを「名前」として定義しておくことで、プログラムのロジック部分を「意味のある言葉」で記述できるようになるのです。

3. 実装と解決策

実装の手順は簡単です。
1. CONFIGURATION SECTIONのSPECIAL-NAMES段落にて、CLASS句を使用して独自の文字集合に名前を付けます。
2. 判定したいデータ項目に対して、IF文で「IS クラス名」と記述するだけです。
これにより、複雑なロジックを隠蔽し、宣言的かつ直感的なバリデーションを実現できます。

4. サンプルプログラム

以下に、数字とハイフンのみを許可する「MY-VALID-DATA」というクラスを定義したサンプルコードを記載します。

IDENTIFICATION DIVISION.
PROGRAM-ID. CLASS-TEST.

CONFIGURATION SECTION.
SPECIAL-NAMES.

  • 数字とハイフンのみを許可するクラスを定義

CLASS MY-VALID-DATA IS ‘0’ THRU ‘9’ ‘-‘ .

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-INPUT-DATA PIC X(10).

PROCEDURE DIVISION.

  • テストデータの代入

MOVE “123-456” TO WS-INPUT-DATA.

  • 独自クラスによるバリデーション判定

IF WS-INPUT-DATA IS MY-VALID-DATA
DISPLAY “入力値は正常です: ” WS-INPUT-DATA
ELSE
DISPLAY “許可されていない文字が含まれています: ” WS-INPUT-DATA
END-IF.

STOP RUN.

5. 応用・注意点

この手法を用いる際の注意点は、「定義した文字セット以外の文字が一つでも含まれていれば偽(FALSE)となる」という点です。例えば、空白(スペース)も許可したい場合は、クラス定義に「’ ‘」を追加することを忘れないでください。
また、この定義はプログラム単位での有効範囲となるため、複数のプログラムで共通のバリデーションを行いたい場合は、COPY句を使って定義を共通化するのが現場での定石です。複雑な正規表現を駆使する前に、まずはCOBOL本来の強力な機能であるCLASS指定を活用し、堅牢で読みやすいプログラムを目指しましょう。

コメント

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