1

ユーティリティ パッケージ (vsmr) を使用して VSAM ファイルの値を読み取り、コピーブックのソース コードを入手しました。

以下のような定義がある場合(フォーマットを許してください)

01 RECORD
   05 RECORD-X PIC S9(3)V99 COMP-3
   05 RECORD-Y PIC S9(3)V99 COMP-3
   05 RECORD-Z PIC S9(3) COMP-3
   05 RECORD-ALPHA PIC X(10)

そして、私はデータに次のものを持っています

00 20 0C 01 10 0C 01 00 0C

RECORD-X の数値を決定するにはどうすればよいですか?

RECORD-X は 3 バイトを取り、値 00 20 0C は RECORD-X の値に対応すると仮定しますが、これを人間が読める値に変換する方法がわかりません (アルゴリズム的に、必ずしもプログラム的にではありません)。

また、値 01 10 0C が RECORD-Y の値に対応すると仮定します。私の仮定は正しいですか?

4

1 に答える 1

4

COMP-3 は、2 進化 10 進数 (BCD) の実装です。バイトの各ニブルは数字に対応し、最後のニブルが符号を保持します。あなたが持っている場所...

00 20 0C 01 10 0C 01 00 0C

...最初の 3 バイトをRECORD-X+002.00 の値にマップできます。C、A、F、または E の値を持つ符号ニブルは、算術的に正と見なされます。B または D の値を持つ符号ニブルは、算術的に負と見なされます。小数点はデータにエンコードされていません。小数点がどこにあるかを知るには、フィールド定義が必要です。

IBM Enterprise COBOL には、「優先符号」の概念があり、正の場合は C、負の場合は D です。データがすべて「優先符号」であることが確実な場合に利用できる最適化があります。

あなたの仮定RECORD-Yは正しいです。その値は +11.00 です。

MOVE RECORD-X TO RECORD-X-DISPLAYCOBOL を作成している場合、これを人間が読める値に変換するアルゴリズムを実装する必要はありませRECORD-X-DISPLAYPIC +999.99

于 2016-04-29T18:09:06.767 に答える