COBOLのNUMERIC・ALPHABETICをやさしく解説!初心者でも理解できるクラス条件の使い方
生徒
「COBOLで、入力された文字が数字だけなのか、文字だけなのかを調べたいときって、どうするんですか?」
先生
「そういうときには、COBOLの『クラス条件(クラスけんじょう)』を使うんですよ。『NUMERIC』や『ALPHABETIC』がよく使われます。」
生徒
「なんだか難しそうですが、使い方は簡単なんですか?」
先生
「実はとっても簡単なんです。やさしく説明するので、順番に見ていきましょう!」
1. クラス条件(NUMERIC・ALPHABETIC)とは?
COBOL(コボル)には、変数の中に入っている値が「数字だけ」なのか「アルファベットだけ」なのかを調べる便利な機能があります。これが「クラス条件」と呼ばれるものです。
具体的には次の2つがよく使われます:
NUMERIC(ニューメリック)…数字だけで構成されているか調べる条件ALPHABETIC(アルファベティック)…英字だけで構成されているか調べる条件
この条件を使えば、たとえばユーザーが入力したデータが数字か文字かを簡単に判断できます。
2. NUMERIC(数字だけかをチェック)
NUMERICは、「そのデータが全部数字(0~9)でできているかどうか」を調べるための条件です。
たとえば、ユーザーが年齢を入力する場面で、数字以外の文字が混じっていないか確認したい場合に使います。
次のサンプルコードを見てみましょう。
IDENTIFICATION DIVISION.
PROGRAM-ID. CHECK-NUMERIC.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 USER-INPUT PIC X(5).
01 RESPONSE-MESSAGE PIC X(40).
PROCEDURE DIVISION.
DISPLAY "年齢を入力してください(例:25):"
ACCEPT USER-INPUT
IF USER-INPUT IS NUMERIC
MOVE "数字だけが入力されました。" TO RESPONSE-MESSAGE
ELSE
MOVE "数字以外の文字が含まれています。" TO RESPONSE-MESSAGE
END-IF
DISPLAY RESPONSE-MESSAGE
STOP RUN.
実行結果の例:
年齢を入力してください(例:25):
25
数字だけが入力されました。
このように、IF USER-INPUT IS NUMERIC で、USER-INPUTが数字かどうかを判断できます。
3. ALPHABETIC(英字だけかをチェック)
ALPHABETICは、「英字(A~Z、a~z)だけでできているか」を調べます。数字や記号が入っていると判定されません。
たとえば、名前を入力してもらう場面で使えます。
IDENTIFICATION DIVISION.
PROGRAM-ID. CHECK-ALPHABETIC.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NAME-INPUT PIC X(10).
01 RESULT-MESSAGE PIC X(40).
PROCEDURE DIVISION.
DISPLAY "名前を入力してください(例:TARO):"
ACCEPT NAME-INPUT
IF NAME-INPUT IS ALPHABETIC
MOVE "英字だけが入力されました。" TO RESULT-MESSAGE
ELSE
MOVE "数字や記号が含まれています。" TO RESULT-MESSAGE
END-IF
DISPLAY RESULT-MESSAGE
STOP RUN.
実行結果の例:
名前を入力してください(例:TARO):
TARO
英字だけが入力されました。
ALPHABETICは、英字以外の記号や数字が混じっていると、条件に当てはまりません。
4. 注意!空白(スペース)にも気をつけよう
実は、COBOLのクラス条件は「スペース(空白)」もチェックの対象になります。
たとえば、名前に続いて空白が入っているだけでも、ALPHABETICでは「英字だけではない」と判断されてしまいます。
このような場合、入力前に余計なスペースを除去する方法(トリム処理)を使うと便利ですが、それは別の記事で紹介します。
5. クラス条件を使った簡単なバリデーション
バリデーションとは、「入力されたデータが正しいかどうかを確認する処理」のことです。
たとえば、社員コードは数字だけ、氏名は英字だけといったルールがある場合、NUMERICやALPHABETICでチェックすることで正しい入力を促すことができます。
次のように使うこともできます:
IF EMPLOYEE-CODE IS NOT NUMERIC
DISPLAY "社員コードは数字で入力してください。"
END-IF
このようにIS NOT NUMERICと書けば、「数字ではない」ことをチェックできます。
6. その他のクラス条件(参考)
今回はNUMERICとALPHABETICの基本だけを紹介しましたが、他にもCOBOLには次のようなクラス条件があります。
ALPHANUMERIC(アルファニューメリック)…英数字が混ざっていてもOKDBCS(ダブルバイト)…日本語などの全角文字が含まれるかをチェック(環境による)
これらはもう少し上級者向けの内容ですが、COBOLでは入力データの中身をしっかりと確認できるようにたくさんの機能が備わっているのです。