COBOLのデータ型エラーを徹底解説!初心者でもわかるトラブルの原因と解決方法
生徒
「COBOLのプログラムを動かそうとしたら、データ型エラーって出たんですけど、何が悪いのかわかりません……」
先生
「データ型エラーはCOBOLでよくあるトラブルのひとつです。初心者の方でも原因がわかれば、ちゃんと解決できますよ。」
生徒
「どうしてそんなエラーが起こるんですか?何に気をつければいいんですか?」
先生
「それでは、COBOLのデータ型エラーの原因と対処法について、わかりやすく解説していきましょう!」
1. データ型エラーとは?
まず最初に「データ型」とは、データの種類のことを表します。たとえば、数字を表す「数値型」や、文字を表す「文字型」があります。
COBOLでは、変数(データを保存する入れ物)を定義するときに、必ず「PIC(ピクチャ)句」という形で、その変数の型とサイズを指定します。
たとえば、
01 NUM-A PIC 9(4).
01 STR-A PIC X(4).
このように書くと、NUM-Aは4桁の数字、STR-Aは4文字の文字列(文字の集まり)という意味になります。
データ型エラーは、たとえば「文字列を数字に入れようとした」ような、合わない種類のデータを無理やり入れようとしたときに発生します。
2. データ型エラーが起こる具体例
次のようなコードを見てみましょう。
01 NUM-B PIC 9(3).
01 STR-B PIC X(3) VALUE "ABC".
PROCEDURE DIVISION.
MOVE STR-B TO NUM-B
このプログラムでは、文字列「ABC」を数字専用の変数NUM-Bに入れようとしています。
しかし、「ABC」は数字ではありません。そのため、実行時にデータ型エラー(Numeric Conversion Errorなど)が出ることがあります。
3. なぜエラーになるの?コンピューターの気持ちになって考えよう
人間の感覚では「文字と数字が混ざっていても何となくわかる」かもしれません。でもコンピューターはとても正確で、数字には数字だけ、文字には文字だけでなければ混乱してしまいます。
たとえば、数字用の箱に「ABC」という文字を入れようとすると、「これ、どう処理したらいいの?」とコンピューターが困ってしまうのです。
このようなズレが原因でエラーが発生します。
4. データ型エラーを防ぐコツとチェックポイント
- 数値型(PIC 9)には、数字だけを入れる
- 文字型(PIC X)には、どんな文字でも入れられる(ただし数値計算はできません)
- 変数に入れる前に、データの中身を確認する
簡単なチェック方法として、次のような工夫ができます。
01 INPUT-STR PIC X(3).
01 CHECK-NUM PIC 9(3).
PROCEDURE DIVISION.
DISPLAY "3桁の数字を入力してください:"
ACCEPT INPUT-STR
MOVE INPUT-STR TO CHECK-NUM
DISPLAY "入力された数字は:" CHECK-NUM
このプログラムでは、ユーザーに3桁の数字を入力してもらい、それを数値型に変換して表示します。
でも、もし「ABC」などの文字を入力してしまった場合は、意図しない値になったり、エラーが発生することがあります。
5. 編集付きピクチャ句とデータ型の注意点
COBOLでは、数字を見やすく表示するための編集付きピクチャ句という機能があります。
たとえば、「0123」という数字を「123」と表示したり、「1,234」のようにカンマ区切りにしたりできます。
01 NUM-VALUE PIC 9(4) VALUE 1234.
01 DISP-VALUE PIC Z,ZZ9.
PROCEDURE DIVISION.
MOVE NUM-VALUE TO DISP-VALUE
DISPLAY "整形後の値:" DISP-VALUE
整形後の値: 1,234
ただし、この編集付きの項目に、文字列を無理やり入れたり、逆に編集済みの文字列を計算に使おうとすると、型の不一致が原因でデータ型エラーになることがあります。
6. MOVE CORRESPONDING使用時の型ミスにも注意!
MOVE CORRESPONDING(同じ名前の項目をまとめてコピーする命令)も、便利な反面、型が合っていないとトラブルの元になります。
01 FROM-REC.
05 NAME PIC X(10).
05 AGE PIC 99.
01 TO-REC.
05 NAME PIC X(10).
05 AGE PIC X(2).
PROCEDURE DIVISION.
MOVE CORRESPONDING FROM-REC TO TO-REC
この例では、AGEの型がFROM-RECは数字(PIC 99)、TO-RECは文字(PIC X(2))になっていて、型が違います。
このように、MOVE CORRESPONDINGは便利ですが、項目の型とサイズが一致しているかを必ず確認しましょう。
7. データ型エラーのトラブルシューティング手順
- エラーメッセージをよく読む(どの行で何が原因か書いてあることが多い)
- MOVE文の左右の型とサイズを確認する
- 数値型に文字列を入れていないか確認
- 編集付き項目を計算に使っていないかチェック
- MOVE CORRESPONDINGの項目の型を揃える
データ型エラーは、初心者のうちはとてもよくある間違いです。でも、型を意識して丁寧に確認すれば、すぐに防ぐことができます。