
すいませんコボル初心者の者です。周りに聞く人がいずに困っています。
アドバイスよろしくおねがします。
例えば、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)に左詰でセットするために
入力項目の頭のゼロをどう処理していいかもわかりません。
考えても結論がでませんでしたので、投稿しました。
宜しくお願いします。
No.4ベストアンサー
- 回答日時:
★ひとつ目の質問。
いろいろと特殊命令を使いますが簡単にコーディングできますし、覚えておくと便利です。
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.
お役に立つかちょっと不安ですが(^^;)
コボル言語は他の言語と違って、ある程度法則を覚えると簡単です。
頑張ってくださいね。
No.5
- 回答日時:
NO4の者です。
すみません、ちょっと間違えてました(><)
*<< 「.」で判断して整数と少数に分ける >>
unstring in-sunpo delimited by all "." into wk-seisu wk-syousu.
↓
unstring in-sunpo delimited by all "." into wk-seisu9 wk-syousu.
でした。お恥ずかしい・・・(///)
すばらしいです。
ありがとうございます。
サブルーチンの存在を発見したのですが、
こんなに簡単にできるとは。
大変勉強になりました。
ありがとうございました。
No.3
- 回答日時:
"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.
アドバイスありがとうございました。
いろいろ資料をあせっていたら、サブルーチンが
ありました。
内容はアドバイスされたようなものでした。
勉強になりました。ありがとうございました。
No.2
- 回答日時:
こちらで確認が出来ないので、憶測ですが。
。。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 …
No.1
- 回答日時:
まず、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のマニュアル読んで再度更新!(予定)
帰宅してからも・・・。本当にありがとうございます。
感謝です。
本日は解決せずに、帰宅しました。
今、自宅で拝見させていただきました。
明日、実行してみます。
結果ご報告いたします。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【COBOL】文字列から数値項目に転記するにあたって
その他(プログラミング・Web制作)
-
COBOLのMOVEで桁数が異なる場合
その他(プログラミング・Web制作)
-
S9タイプからXタイプにデータは移行できるのか。(COBOL)
その他(プログラミング・Web制作)
-
-
4
COBOL数値転記の仕様
その他(プログラミング・Web制作)
-
5
COBOLのS9タイプからXタイプへ変換する過程
その他(プログラミング・Web制作)
-
6
COBOL、項目末尾に空白がある場合削除の方法その他
その他(プログラミング・Web制作)
-
7
COBOLについて
その他(プログラミング・Web制作)
-
8
COBOLのCOMP形式について
その他(プログラミング・Web制作)
-
9
COBOL 9(02)で定義した変数にマイナス値をセットすると?
その他(プログラミング・Web制作)
-
10
COBOLによる全角・半角混在→全角に
その他(プログラミング・Web制作)
-
11
COBOLの数字チェック
その他(プログラミング・Web制作)
-
12
COBOL・全角判定
その他(プログラミング・Web制作)
-
13
COBOLでのNOT = の AND条件
その他(プログラミング・Web制作)
-
14
COBOLのIFの入れ子について
その他(プログラミング・Web制作)
-
15
COBOLの基本的な事なのですが。。。
その他(プログラミング・Web制作)
-
16
COBOLのイニシャライズとバリュー句について
その他(プログラミング・Web制作)
-
17
EBCDIC⇒SJIS変換の方法
その他(プログラミング・Web制作)
-
18
「後継」の反意語は「前継」ですか?
日本語
-
19
COBOLの改行
その他(プログラミング・Web制作)
-
20
CLOB型へのINSERT
Oracle
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語、C+、C++、C#の違い
-
プログラムに書かれる"%"記号の...
-
Excel VBAで文字化けする (英語...
-
コンピュータ用語で使われる"ブ...
-
lispの入門書
-
C++における継続行
-
C言語とhtmlの違いを どな...
-
C言語より後に開発されたプログ...
-
GOTO文がない言語・・・
-
UNITY Float型の接尾辞fって
-
ゲームは何文字のプログラムで...
-
任天堂で使うプログラミング言...
-
【Cか】ノベルゲーム【Jav...
-
パスカルケースの由来。
-
.Net Framework APIがあればMFC...
-
TANDEM言語ってあるんですか?
-
C#で大富豪
-
webbrowserでクリックさせない...
-
パソコン関係の言葉が良く分か...
-
軌道計算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムからアイコンファイ...
-
C言語、C+、C++、C#の違い
-
COBOLでのNOT = の AND条件
-
C言語とhtmlの違いを どな...
-
プログラムに書かれる"%"記号の...
-
UNITY Float型の接尾辞fって
-
COBOLで文字タイプを数字...
-
Excel VBAで文字化けする (英語...
-
VCとVC++
-
HTMLとC++で、どんなホームペー...
-
ウェブサイトから特定の文字列...
-
C++における継続行
-
C++ ってなんて読む?
-
順列の内容をすべて表示するプ...
-
プログラムははぜ小文字大文字...
-
【Cか】ノベルゲーム【Jav...
-
VBScriptで引数を省略したい場合
-
ど素人です。7セグメント表示の...
-
.Net Framework APIがあればMFC...
-
VBSとWSHは読み方が違うだけで...
おすすめ情報