初めて自分の家と他人の家が違う、と意識した時

すいませんコボル初心者の者です。周りに聞く人がいずに困っています。
アドバイスよろしくおねがします。

例えば、IN-SUNPO PIC X(7)に "0.25"や"0.025"と値が入っているとします。
この項目を OUT-SUNPO PIC 9(4)V9(3)にセットして出力したいのですが
いい方法が考えつきません。
どのようにすれば実現するのでしょうか。
また、IN-TANAK PIC 9(8)をOUT-TANKA PIC X(10)に左詰でセットするために
入力項目の頭のゼロをどう処理していいかもわかりません。
考えても結論がでませんでしたので、投稿しました。
宜しくお願いします。

A 回答 (5件)

★ひとつ目の質問。


いろいろと特殊命令を使いますが簡単にコーディングできますし、覚えておくと便利です。

01 wk-seisu.
 03 wk-seisu9 pic 9(4).
01 wk-syosu.
 03 wk-syosu9 pic 9(3).

*<< in-sunpo の空白を0に置き換える >>
inspect in-sunpo replacing all " " by "0".

*<< 「.」で判断して整数と少数に分ける >>
unstring in-sunpo delimited by all "." into wk-seisu wk-syousu.

*<< 分けた数字を合わせる >>
compute in-sunpo = wk-seisu9 + (wk-syosu9 / 1000).



★ふたつ目は他の方が回答されているのと同じです。

*<< 符号(-)があるとき >>
01 wk-tanka.
 03 wk-kanka9  pic -------9.
*<< 符号(-)がないならこれでもいいです >>
01 wk-tanka.
 03 wk-tanka9  pic zzzzzzz9.

move in-tanta to wk-tanka9.
move wk-tanka to out-tanka.



お役に立つかちょっと不安ですが(^^;)
コボル言語は他の言語と違って、ある程度法則を覚えると簡単です。
頑張ってくださいね。
    • good
    • 1

NO4の者です。


すみません、ちょっと間違えてました(><)

*<< 「.」で判断して整数と少数に分ける >>
unstring in-sunpo delimited by all "." into wk-seisu wk-syousu.



unstring in-sunpo delimited by all "." into wk-seisu9 wk-syousu.


でした。お恥ずかしい・・・(///)
    • good
    • 2
この回答へのお礼

すばらしいです。
ありがとうございます。
サブルーチンの存在を発見したのですが、
こんなに簡単にできるとは。
大変勉強になりました。
ありがとうございました。

お礼日時:2002/10/23 22:01

"0.25"、"0.025"が、必ず右詰め?


整数部の桁は変動?
ということで、整数部と小数部を分解して、編集後、セットするというのはどうでしょう?

01 IN-SUNPO PIC X(7).
01 OUT-SUNPO PIC 9(4)V9(3).
01 WORK-AREA.
05 WIN-SUNPO-TBL.
10 WIN-SUNPO OCCURS 7 TIMES PIC X(1).
*
05 WIN-SEISU-TBL.
10 WIN-SEISU OCCURS 7 TIMES PIC X(1).
05 WIN-SHOSU-TBL.
10 WIN-SHOSU OCCURS 7 TIMES PIC X(1).
05 WIN-SEISU2-TBL.
10 WIN-SEISU2 OCCURS 7 TIMES PIC X(1).
05 WIN-SEISU2-TBL-R REDEFINES WIN-SEISU2-TBL.
10 WIN-SEISU2-R PIC 9(7).
05 WIN-SHOSU-TBL-R REDEFINES WIN-SHOSU-TBL.
10 WIN-SHOSU-R PIC 9(7).
*
05 WOU-SUNPO 9(7)V9(7).
05 WOU-SUNPO-R REDEFINES WOU-SUNPO.
10 WOU-SEISU-R 9(7).
10 WOU-SHOSU-R 9(7).
*
01 IXA PIC 9(1) VALUE 0.
01 IXB PIC 9(1) VALUE 0.
01 IXC PIC 9(1) VALUE 0
01 IXD PIC 9(1) VALUE 0.

MOVE IN-SUNPO TO WIN-SUNPO-TBL.
MOVE ZERO TO IXB,IXC,IXD,IXE.
*整数部セット
PERFORM VARYING IXA FROM 1 BY 1
UNTIL IXA > 7
EVALUATE WIN-SUNPO(IXA)
WHEN " " CONTINUE
WHEN "."
COMPUTE IXC = IXA - 1
MOVE IXA TO 9
WHEN OTHER
ADD 1 TO IXB
MOVE WIN-SUNPO(IXA) TO WIN-SEISU(IXB)
END-EVALUATE
END-PERFORM.
*整数部右詰めセット
MOVE 8 TO IXB.
PERFORM VARYING IXA FROM 7 BY -1
UNTIL IXA < 1
IF WIN-SEISU(IXA) = SPACE
THEN CONTINUE
ELSE SUBTRCT 1 FROM IXB
MOVE WIN-SEISU(IXA) TO WIN-SEISU2
END-IF
END-PERFORM.
INSPECT WIN-SEISU2-TBL LEADING " " BY "0".
MOVE WIN-SEISU2-R TO WOU-SEISU-R.
*小数部セット
PERFORM VARYING IXD FROM IXC BY 1
UNTIL IXD > 7
EVALUATE WIN-SUNPO(IXD)
WHEN " " CONTINUE
WHEN OTHER
ADD 1 TO IXE
MOVE WIN-SUNPO(IXD) TO WIN-SHOSU(IXE)
END-EVALUATE
END-PERFORM.
INSPECT WIN-SHOSU-TBL LEADING " " BY "0".
MOVE WIN-SHOSU-R TO WOU-SHOSU-R.
*
MOVE WOU-SUNPO TO OUT-SUNPO.
    • good
    • 2
この回答へのお礼

アドバイスありがとうございました。
いろいろ資料をあせっていたら、サブルーチンが
ありました。
内容はアドバイスされたようなものでした。
勉強になりました。ありがとうございました。

お礼日時:2002/10/23 21:24

こちらで確認が出来ないので、憶測ですが。

。。

01 OUT-SUNPO-X.
03 OUT-SUNPO PIC 9(4)V9(3).

と定義し、
MOVE IN-SUNPO TO OUT-SUNPO-X.
で、代入後、
OUT-SUNPO
を使用してはいかがでしょう。。。


01 IN-TANAK PIC --------9.
01 OUT-TANKA REDEFINES IN-TANAK PIC X(10).

とかでも出来たはずですが。。。

以下URLを参考になさって、実際に動かしてみて下さい。

参考URL:http://hp.vector.co.jp/authors/VA003991/kouza/ko …
    • good
    • 0
この回答へのお礼

明日、やってみます。
結果ご報告いたします。ありがとうございました。

お礼日時:2002/10/23 00:05

まず、PIC XからPIC 9にはMOVEが出来ません。

(逆は可能)そこで簡単なサブルーチンを作成してはどうでしょうか。COBOL言語が数年行ってないので考えかたでよろしいでしょうか?

Basic 形式で記載でごめんなさい!

for i=1 to 7
if IN-SUNPO(i:1)="." THEN
n = i
break
end-if
next i

OUT_SUNPO = 0
for i=n-1 to 1 setp -1
select case IN-SUNPO(i:1)
case "0"
OUT_SUNPO = OUT_SUNPO + (0 * 10^(i-n))

残り9まで同様

next

負も同じ考えでn+1から7桁で処理

これで駄目ですか?

帰宅して時間があってらCOBOLのマニュアル読んで再度更新!(予定)
    • good
    • 0
この回答へのお礼

帰宅してからも・・・。本当にありがとうございます。
感謝です。
本日は解決せずに、帰宅しました。
今、自宅で拝見させていただきました。
明日、実行してみます。
結果ご報告いたします。ありがとうございました。

お礼日時:2002/10/23 00:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報