数字項目データの取扱いについて教えてください。

数字項目データの取扱いについて教えてください。
「数字項目データの取扱い」は、COBOLプログラムを作成するときに誤りやすい事項です。
以下にデータ型および規則、変数に不正な値が入ったときの動作、デバッグ方法について説明します。
■データ型の形式
各データ型の形式は、COBOL文法書の「5.4.15 USAGE句」に記述しています。
COBOL文法書については、製品マニュアルを参照してください。
以下に、例を挙げます。
  • 符号付き2進項目
    ---
    PIC S9(4) COMP VALUE 1234.
    ---
    2進形式で2Byteに格納されます。


  • 符号なし内部10進
    ---
    PIC 9(4) PACKED-DECIMAL VALUE 1234.
    ---
    内部10進形式で3Byteに格納されます。最後の4bitには、X'F'が入ります。


  • 符号付き内部10進
    ---
    PIC S9(4) PACKED-DECIMAL VALUE 1234.
    ---
    内部10進形式で3Byteに格納されます。最後の4bitには、数値が正の場合X'C'、 負の場合X'D'が入ります。


  • 符号なし外部10進
    ---
    PIC 9(4) DISPLAY VALUE 1234.
    ---
    外部10進形式で4Byteに格納されます。各文字位置には、文字'0'~'9'が入ります。


  • 符号付き外部10進(SIGN TRAILING)
    ---
    PIC S9(4) DISPLAY VALUE 1234.
    ---
    外部10進形式で4Byteに格納されます。各文字位置には、文字'0'~'9'が入りますが、 最後の文字の先頭4bitには、数値が正の場合X'4'、負の場合X'5'が入ります。


■数に不正な値が入ったときの規則
 変数に不正な値が入ったときの規則は、COBOL文法書で以下のように記述しています。
 ---
 6.3.14 矛盾するデータ(COBOL文法書より)
 字類条件を除いて、手続き部でデータ項目の内容が参照される場合、データ項目の 内容がPICTURE句によるデータ項目の字類または関数による字類と矛盾するとき、 手続き部での参照の結果は規定しません。
 ---
 変数に不正な値が入っていた場合、プログラムの動作としては、 保障されないものとなります。
 例えば、以下のようなプログラムでは、(a)で外部10進項目に不正な値が転記されている ため、(b)の比較の結果は予測できません。
 
 
■変数に不正な値が入ったときの動作
 GS/Mシリーズでは、ハードウェア命令がデータ異常を検出し、アプリケーションが異常終了 する場合があります。しかし、オープン系のアーキテクチャーでは、データ異常を検出しないため、 不正な値のまま処理され、実行結果が期待した値になりません。
 不正な実行結果の残さないために、外部10進項目を使用する場合、字類検査(IS NUMERIC) を行い、正しい値が格納されていることを確認してから、使用します。
 

 上記の(c)では、IF文の条件で SND-DATAには数字が入っているかどうかを確認しています ので、(d)の転記処理では正しい転記結果が得られるようになります。
 
 
■デバッグ方法
安全なプログラムを作成するには、プログラム内で字類条件を用いて、 正しいデータであることを確認してください。

 既にあるプログラムで誤ったデータを処理していないかどうかを確認するには、 翻訳オプションに「CHECK(NUMERIC)」または「CHECK(ALL)」を指定して、 翻訳、実行してください。このオプションの指定により、外部10進項目および内部10進項目に 不正なデータが格納されていた場合、実行時に誤りが検出されます。
製品・サービス区分 NetCOBOL
製品・サービス情報
対象製品NetCOBOL
バージョン
プラットフォームWindows, Solaris, Linux
アンサー種別 技術サポート
このページの先頭へ