数字項目データの取扱いについて教えてください。
NetCOBOLのよくあるご質問を検索できます。
- 数字項目データの取扱いについて教えてください。
- 「数字項目データの取扱い」は、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進項目に 不正なデータが格納されていた場合、実行時に誤りが検出されます。 - 符号付き2進項目
製品・サービス区分 | NetCOBOL | ||||||
---|---|---|---|---|---|---|---|
製品・サービス情報 |
|
||||||
アンサー種別 | 技術サポート |