
すいませんコボル初心者の者です。周りに聞く人がいずに困っています。
アドバイスよろしくおねがします。
例えば、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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) COBOL数値転記をCOPY句内での仕様 6 2022/06/15 18:48
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) 【VBA】Excelの特定範囲のセルを画像で保存したい 2 2023/01/25 13:06
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- その他(プログラミング・Web制作) Windowsのバッチファイルについてご教示ください 5 2023/07/25 20:23
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- その他(パソコン・周辺機器) WINDOWS11 IMEの日本語入力で困っています 4 2023/04/29 19:24
- 作詞・作曲 TVアニメ『キャプテンハーロック』の主題歌は来月起きる大災害を予言しているようですが、どうかな? 2 2023/03/30 19:03
- JavaScript 助けてください!スパムメールがとんでもなく大量に届きます。 3 2023/08/10 16:32
このQ&Aを見た人はこんなQ&Aも見ています
-
【COBOL】文字列から数値項目に転記するにあたって
その他(プログラミング・Web制作)
-
COBOLのMOVEで桁数が異なる場合
その他(プログラミング・Web制作)
-
S9タイプからXタイプにデータは移行できるのか。(COBOL)
その他(プログラミング・Web制作)
-
-
4
COBOL数値転記の仕様
その他(プログラミング・Web制作)
-
5
COBOL、項目末尾に空白がある場合削除の方法その他
その他(プログラミング・Web制作)
-
6
COBOLのS9タイプからXタイプへ変換する過程
その他(プログラミング・Web制作)
-
7
COBOLについて
その他(プログラミング・Web制作)
-
8
COBOLのCOMP形式について
その他(プログラミング・Web制作)
-
9
COBOL 9(02)で定義した変数にマイナス値をセットすると?
その他(プログラミング・Web制作)
-
10
COBOLでのNOT = の AND条件
その他(プログラミング・Web制作)
-
11
COBOL・全角判定
その他(プログラミング・Web制作)
-
12
COBOLによる全角・半角混在→全角に
その他(プログラミング・Web制作)
-
13
COBOLの数字チェック
その他(プログラミング・Web制作)
-
14
EBCDIC⇒SJIS変換の方法
その他(プログラミング・Web制作)
-
15
[COBOL]日付比較
その他(プログラミング・Web制作)
-
16
COBOLで半角カナを全角カナに変換
その他(プログラミング・Web制作)
-
17
【COBOL】read文でエラー
その他(プログラミング・Web制作)
-
18
「後継」の反意語は「前継」ですか?
日本語
-
19
COBOLで全角変換を行いたいのですが...
その他(プログラミング・Web制作)
-
20
COBOLのIFの入れ子について
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムからアイコンファイ...
-
C言語とhtmlの違いを どな...
-
プログラミングについてです。 ...
-
UNITY Float型の接尾辞fって
-
スプレッドシートの作成
-
GCCでグラフィック
-
プログラミング言語の取得方法
-
C言語、C+、C++、C#の違い
-
言語のことで。
-
プログラム言語別用途
-
COBOLでのNOT = の AND条件
-
EXCELの表示について
-
ホームページを作成する際に良...
-
VBScript
-
プログラムに書かれる"%"記号の...
-
初心者におススメのプログラミ...
-
Bassic98 For Windows 4.1の組...
-
チューリング完全とは何か?
-
プログラミング言語は何種類で...
-
C言語の参考書
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語、C+、C++、C#の違い
-
プログラムからアイコンファイ...
-
C言語とhtmlの違いを どな...
-
COBOLでのNOT = の AND条件
-
プログラムに書かれる"%"記号の...
-
UNITY Float型の接尾辞fって
-
C++における継続行
-
COBOLで文字タイプを数字...
-
UWSCはどのプログラミング言語?
-
Excel VBAで文字化けする (英語...
-
VBScriptで引数を省略したい場合
-
vbaとc言語の関連性について
-
VCとVC++
-
TO_CHARで小数点以下がある場合...
-
パスカルケースの由来。
-
VBSでDim、Private、Publicの違い
-
C++ ってなんて読む?
-
C for Linuxでの設定ファイル読...
-
VBSとWSHは読み方が違うだけで...
-
VB.NETからC言語への乗...
おすすめ情報