10進項目の入力
入力レコード中に10進項目が含まれている場合、誤った内容表現のデータが入らないように注意してください。
正しいビットパターンが入っているかどうかを確かめるには、字類条件(IF … IS NUMERIC)を使います。コンパイラは、READ文の実行時に、10進項目のビットパターンを検査しません。
10進項目を含む集団項目へCORRESPONDING指定のない転記を行う場合、誤ったビットパターンが入らないよう注意してください。
この場合も、コンパイラは検査を行いません。
10進項目に誤ったビットパターンが入った場合
外部10進項目のゾーン部(符号を持つバイトを除く)が16進数の3でない場合、誤りです。
10進項目の数字部が許されるビットパターン(16進数の0~9)でない場合、この項目を転記、演算または比較などに使用すると、結果は規定されません。
英数字項目から数字項目の転記は数字転記になり、英数字項目を符号なし10進項目にみなして転記します。よって、(a)のSND-DATAはPIC 9(4)とみなし翻訳されます。空白が入っている場合などの不正な値は誤りとなり、結果は予測できません。(a)のMOVE文が予測できないため、(b)の比較結果も予測できません。
01 SND-DATA PIC X(4). 01 RSV-DATA PIC 9(4). ... MOVE SPACE TO SND-DATA ... MOVE SND-DATA TO RSV-DATA …(a) IF RSV-DATA = SPACE THEN …(b)
10進項目に不正な値が設定される可能性がある場合は、(c)のように字類条件(IS NUMERIC)を使用し、正しい値が格納されていることを確認してから使用します。
01 SND-DATA PIC X(4). 01 RSV-DATA PIC 9(4). ... MOVE SPACE TO SND-DATA MOVE 0 TO RSV-DATA ... IF SND-DATA IS NUMERIC THEN …(c) MOVE SND-DATA TO RSV-DATA ELSE DISPLAY NC"データ異常" SND-DATA END-IF