3

PIC Xa の数値を aに移動するとPIC 9、数値フィールドの値が 0 になります。

FOO、 a PIC X(400)、最初のバイトに「1」があり、残りの 399 にスペースがありますPIC 9(02) BAR

DISPLAY FOO
MOVE FOO to BAR
DISPLAY BAR

収量

1
0

BAR が 1 ではなく 0 なのはなぜですか? [編集: もともと、「何が起こっているのですか?」]

追記: NealB は次のように述べています。

それは私が本当にCOMPUTE BAR AS FUNCTION NUMVAL(FOO)テストNUMERICではなく、MOVE.

4

3 に答える 3

2

9(2) の値が "0" ではなく "1" として表示されることを期待していて、そうでない理由について混乱していると思いますか?

X 値から移動すると、値が左から右に移動します (移動先の値が変更されない限り)。したがって、9 の値にはスペースが含まれています。簡単にするために、「X(2) 値 '1 '」を 9(2) 値に移動すると、文字通りこれらの文字が移動します。スペースによって 9(2) の内容が無効になるため、COBOL コンパイラはそれを使用して、必要な処理を実行し、0 を返します。つまり、9(2) をそのように定義すると、コンパイラはデータを別の方法。

9(2) を「1」として表示するには、9(2) に正しい方法でデータを提示する必要があります。値が 1 の 9(2) の文字は "01" です。未テスト:

03  FOO       PIC X(2) value '1'.
03  TEXT-01   PIC X(2) JUSTIFIED RIGHT.
03  NUMB-01 REDEFINES TEXT-01 PIC 9(2).
03  BAR       PIC 9(2).

DISPLAY FOO.
MOVE FOO TO TEXT-01.
INSPECT TEXT-01 REPLACING LEADING ' ' BY '0'. 
MOVE NUMB-01 TO BAR.
DISPLAY BAR.

あなたの例で BAR に対して NUMERIC テストを使用すると、同様に失敗するはずです...

于 2013-05-18T03:07:56.570 に答える