数字フィールドに数値以外が転記された場合にエラーにする方法
【事象】
メインフレーム上の COBOL では、X タイプ定義から 9 タイプ定義に移送する処理で、誤って数値以外が移送元に設定されていた場合、0C7 で ABEND します。
同じようにエラーにする方法を教えて欲しい。
【対応方法】
Visual COBOL のデフォルト設定ではエラーになりませんが、コンパイラ指令 CHECKNUM を指定することでランタイムエラー 163 を発生させることができます。
詳細は、オンラインマニュアル「CHECKNUM」をご参照ください。
【確認方法】
サンプルプログラム
WORKING-STORAGE SECTION.
01 WK-DATA.
03 WK-XX PIC XX.
03 WK-99 PIC 99.
PROCEDURE DIVISION.
MAIN.
MOVE SPACE TO WK-XX
MOVE WK-XX TO WK-99
STOP RUN.
- Windows での例
コンパイルを行う cobol コマンドに CHECKNUM 指令を追加してコンパイルし、実行します。
c:\work>cobol XXXXX.cbl GNT CHECKNUM;
c:\work>run XXXXX.gnt
目的コード エラー: ファイル 'C:\Work\XXXXXX.gnt'
エラーコード: 163, pc=0, call=1, seg=0
163 数字項目に不正な文字がある (C:\Work\XXXXX.cbl 内, 8 行)
- Linux での例
コンパイルを行う cob コマンドの -N フラグに CHECKNUM 指令を追加してコンパイルし、実行します。
$ cob -u XXXXX.cbl -N CHECKNUM
$ cobrun XXXXX.gnt
目的コード エラー: ファイル '/home/foo/XXXXX.gnt'
エラーコード: 163, pc=0, call=1, seg=0
163 数字項目に不正な文字がある (/home/foo/XXXXX.cbl 内, 8 行)