- ベストアンサー
S9タイプからXタイプにデータは移行できるのか。(COBOL)
こんにちは。 まったくのCOBOLビギナーで困っています。 私がしたいことは、 S9タイプのデータを、Xタイプに移すということです。 元データには'40'(16進数)というデータが入っています。 これは +0 という意味だとおもいます。 これを、Xタイプにムーブして、 '0'と出したいわけです。 '0'を出す為には、'30'(16進数)であればいいことは バイナリで確認しています。 単純にMOVEを書けても、これは、'@'になってしまいます。 S9→X への移行ってできるものなのでしょうか? 知っている方がいらっしゃったらご教授ください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 タイプの違う項目は、直接 MOVE しない方が良いと思います。 たとえば、こんなやり方はいかがでしょうか。 01 A PIC S9. 01 B-X. 03 B PIC 9. と定義しておいて、A を B に MOVE 後、B-X を見ると "0" だと思うのですが。 ちなみに、B を 9(2) としますと、B-X は "00"となり、 B を Z9 とすれば、" 0" になると思います。 COBOL もホストメーカーが違うと、拡張機能の関係で微妙に違ったりするので、不安なんですが。 ご参考までに。
その他の回答 (2)
- Ryocchi
- ベストアンサー率38% (38/98)
S9タイプの値がNullになっているのでは? まず、 0 → S9(MOVE) S9 → X (MOVE) でどうでしょう?
お礼
回答ありがとうございます。 S9には、もともとゼロのデータが入っているのは確認 しました。Display をかけると、+0 とでてきます。 どうやら、この符号がなんらかのかたちでビットに反映されているようなのです;
- taka_tetsu
- ベストアンサー率65% (1020/1553)
S9→9→X の順でMOVE
お礼
回答ありがとうございます。 最初私もそれでやってみましたが、無理でした;
お礼
回答ありがとうございます。 1度、9、9999、zzzz等でためしましたが、だめでした;
補足
本日、知人から耳にした回答でこのようなものがありました。 S9はやはり 符号がビットに反映されているため、 1度、COMPUTEで1をかけてやる必要があるそうです。 試してみたところ、’@’が出なくなりました。 確かな解決かどうかはわかりませんが、 これで上手くデータ移行が出来たとおもいます。 みなさんのご協力感謝いたします。