COBOL2002 使用の手引 操作編


2.3.1 データの比較・代入規則

〈この項の構成〉

(1) データの代入規則

テストデバッガの代入規則は,原則としてCOBOL言語の転記規則に従います。COBOL言語の転記規則との差異を次に示します。

COBOL言語の転記規則については,マニュアル「COBOL2002 言語 標準仕様編」のMOVE文についての説明を参照してください。

(a) けたあふれ・不正なデータ

次の代入は,COBOLプログラムの実行時にされる同様の転記と代入される値が異なる場合があります。

  • 整数・非整数のデータへの代入でけたあふれが生じる。

  • データ項目の属性に適さない値を保持するデータ名から,整数・非整数にデータを代入する。

  • 外部浮動小数点・内部浮動小数点の代入の精度が異なる。

(b) コンパイラオプション

次のコンパイラオプションは適用されません。

-StdVersion,1,-StdVersion,2,-H8Switch,-MinusZero,-International,-V3Rec,Fixed,-V3Rec,Variable,-EquivRule,StdCode,-SpaceAsZero

(c) 拡張16進定数

テストデバッガ独自の定数であり,COBOL言語の16進英数字定数・16進数字定数・16進日本語定数が代入できないデータ項目へ,16進数で指定した値を代入できます。

  • 受け取り側作用対象が次の項目のとき,送り出し側作用対象の16進のけた数が2の倍数でなければなりません。

    • 英数字集団項目

    • 英字項目

    • 英数字項目

    • 英数字編集項目

    • 数字編集項目

  • 受け取り側作用対象が次の項目のとき,送り出し側作用対象の16進のけた数が4の倍数でなければなりません。

    • 日本語集団項目

    • 日本語項目

    • 日本語編集項目

  • 受け取り側作用対象が次の項目のとき,送り出し側作用対象と受け取り側作用対象のサイズが等しくなければなりません。

    • 整数の数字項目

    • 非整数の数字項目

    • 外部浮動小数点の数字項目

    • 内部浮動小数点の数字項目

(d) 代入規則

代入規則を表2-7に示します。

表2‒7 代入規則

[図データ]

(凡例)

○:代入できる 空白:代入できない

注※1

正の整数(0を含むが,-0は含まない)だけ代入できます。

注※2

-JPNコンパイラオプションを指定してコンパイルされたプログラム内データ項目の場合,日本語項目/日本語編集項目は,英数字項目/英数字編集項目の代入規則に従います。受け取り側作用対象がこれに該当する場合,代入できます。

日本語集団項目も上記と同様に,英数字集団項目の代入規則に従います。ただし,-JPN,V3JPNSpaceオプションを指定した場合,-JPNコンパイラオプションは無効となります。

注※3

既定義オブジェクトは,SELF,EXCEPTION-OBJECTとします。

注※4

整数は,次のデータ項目で小数点けたを持たない指定です。非整数は,次のデータ項目で小数点けたを持つ指定です。

・外部10進項目

・内部10進項目

・2進項目(COMP-Xも含む)

注※5

外部浮動小数点形式の数字項目です。

注※6

内部浮動小数点形式の数字項目です。

注意事項
  • 次のデータ項目にNULLまたは不正な値を代入すると,その後,領域が解放されないで残る場合があります。

    NULLまたは不正な値が代入される場合とは,これらのデータ項目が所属する英数字集団項目に基本項目の属性を考慮しないで値を設定したときなどです。

    ・オブジェクト参照データ項目

  • テストデバッガでは,TYPEDEF句のSTRONG指定があるデータ項目への代入は,STRONG指定がないデータ項目と同様に扱われ代入できます。

  • 一般に浮動小数点数は,数値を正確に表現したものではなく,概略の値を表現するもので誤差を含みます。このため,代入元の値と代入後の値が一致しないことがあります。

  • 連絡節で定義したLIMIT指定がない動的長基本項目には代入できません。代入すると,KCCC3433T-Eのメッセージが出力されて,処理が中止されます。ただし,主プログラムシミュレーション中で,SIMULATE MAINコマンドのTDコマンド群に指定した副プログラム内でだけ代入が可能です。また,この動的長基本項目は主プログラム内でLIMIT 1024を定義されているものと仮定されます。値を代入すると,その長さが最大長となって,それ以降はその長さ以下しか代入できなくなります。

(2) データの比較規則

テストデバッガの比較条件の組み合わせは,次の場合を除いてCOBOL言語の比較規則に従います。

COBOL言語の比較規則については,マニュアル「COBOL2002 言語 標準仕様編」の「いろいろな式」の「条件式(Conditional expressions)」を参照してください。

(a) けたあふれ・不正なデータ

次の比較は,COBOLプログラムの実行時に行う同様の比較と結果が異なる場合があります。

  • データ項目の属性に適さない値を保持するデータ名の整数・非整数を比較する。

  • 外部浮動小数点・内部浮動小数点の比較の精度が異なる。

(b) コンパイラオプション

次のコンパイラオプションは適用されません。

-StdVersion,1,-StdVersion,2,-H8Switch,-MinusZero,-International,-V3Rec,Fixed,-V3Rec,Variable,-EquivRule,StdCode,-SpaceAsZero

(c) 拡張16進定数

テストデバッガ独自の定数であり,COBOL言語の16進英数字定数・16進数字定数・16進日本語定数とは比較できないデータ項目と,16進数で指定した値で比較ができます。

  • 左辺または右辺が次の項目のとき,けた数が2の倍数でなければなりません。

    • 英数字集団項目

    • 英字項目

    • 英数字項目

    • 英数字編集項目

    • 数字編集項目

  • 左辺または右辺が次の項目のとき,けた数が4の倍数でなければなりません。

    • 日本語項目

    • 日本語編集項目

    • 日本語集団項目

  • 左辺または右辺が次の項目のとき,両辺のサイズは等しくなければなりません。

    • 整数の数字項目

    • 非整数の数字項目

    • 外部浮動小数点の数字項目

    • 内部浮動小数点の数字項目

    • アドレス名

    • アドレスデータ項目

    • ポインタ項目

(d) 比較規則

比較規則を表2-8に示します。

表2‒8 比較規則

[図データ]

(凡例)

○:比較できる 空白:比較できない

注※1

整数の場合は比較できます。非整数の場合は比較できません。

注※2

-JPNコンパイラオプションを指定してコンパイルされたプログラム内データの場合,日本語項目/日本語編集項目は,英数字項目/英数字編集項目の比較規則に従います。左辺がこれに該当する場合,比較できます。ただし,左辺が定数の場合は,右辺データがこれに該当する場合,比較できます。

日本語集団項目も上記と同様に,英数字集団項目の代入規則に従います。ただし,-JPN,V3JPNSpaceオプションを指定した場合,-JPNコンパイラオプションは無効になります。

注※3

既定義オブジェクトは,SELF,EXCEPTION-OBJECTとします。

注※4

整数は,次のデータ項目で小数点けたを持たない指定です。非整数は,次のデータ項目で小数点けたを持つ指定です。

  • 外部10進項目

  • 内部10進項目

  • 2進項目(COMP-Xも含む)

注※5

外部浮動小数点形式の数字項目です。

注※6

内部浮動小数点形式の数字項目です。

注※7

比較条件式は,次のデータ項目を除いて,>,<,>=,<=,=,NOT=の比較演算子を用います。次のデータ項目では=,NOT=の2種類の比較演算子を用います。

  • ブール項目

  • オブジェクト参照データ項目

  • 既定義オブジェクト

注意事項

一般に浮動小数点数は,数値を正確に表現したものではなく,概略の値を表現するもので誤差を含むことが多いです。このため,DISPLAY DATA TDコマンドなどで表示されたデータ値と比較しても等しくならないなど,比較条件の真理値が一致しない場合があります。