• 締切済み

【COBOL】文字列から数値項目に転記するにあたって

こんにちは。 早速ですがCOBOLのプログラミングで困っています。 MOVEを使って文字列を数値項目に転記する際についてなのですが、 私の今の困っている現状を報告します。 ↓  ↓   ↓ W-A PIC X(5). ←中身は12345 上記のW-Aをの中味が、文字列で'12345'となっている場合に、 このW-Aの中味を、12.345と数値項目で表示するにはどうすればいいのでしょうか?ちなみに小数点第3位まで表示したいのです。 色々参考書とか見ても分からなかったので困っています。。 今日中に終わらせなくてはならない事なので、どうかアドバイスの方を頂けたらと思っています。。 基本的な部分で申し訳ないのですが、どうぞ宜しくお願いします。

みんなの回答

回答No.1

いくつかの方法があると思いますが、・・ 変数の定義をレベルを変えて定義する。バイト数が同じならば 定義ができる。 例)  01 W-B      02 W-B-N  99V999. W-Bは、X(5)と同じ。これにW-A(12345)をMOVEすると、W-B-Nにも、12345が入る。カンマ編集で表示するならば、表示の変数を定義して、これにW-B-NをMOVEし、表示用変数を表示してみると、99.999として出ます。 01 W-A PIC X(5) VALUE '12345'. 01 W-B. 02 W-B-N PIC 99V999. 01 W-C PIC 99.999. MOVE W-A TO W-B. MOVE W-B-N TO W-C. DISPLAY W-C ----> 12.345 になるはず。 ちなみに、W-B-N は数字項目ですから、数字以外の文字列を編集し 扱おうとするとCOBOLの種類によっては異常終了しますので。 以上

関連するQ&A

  • COBOL数値転記の仕様

    このたび、まったくの未経験のCOBOLをやることになりました。 で、数値データの表し方になんやかやとやたら方法があるようなのですが、それらを互いに「転記」したときに、どういう結果になるものか、皆目わからないんです(環境はCOBOL85でWindows上での開発です)。 テクニックとしては基本だと思うのですが、それでいてどこにも説明されていな~い!フリーのCOBOLツールは見つけてきましたが、使い方が???なもので…。  たとえば、  01 X1 PIC XX (数値が入ってるとします)  01 N1 PIC 99  01 D1 PIC 99 COMP  01 B1 PIC 1(16) BIT な場合、X1とN1は直接  MOVE N1 TO X1 などとやってもデータは失われないと思うんですが、他の形式での操作は(桁あふれとか無視して)ちゃんと転記できるのでしょうか。 いま特に、D1からX1へというパターンが多いです。1バイトの2進データを、数値の文字列として使おう、というんです。いわば、1バイトを3バイトに展開してやるんです。何も考えずに書けば、  01 D2 PIC 9(4) COMP VALUE 97  01 X2 PIC X(3)  MOVE D2 TO X2 でしょうけど、たぶん'a△△'になるだけのような気がします…。  それとも、  01 N2 PIC 9(4)  MOVE D2 TO N2  MOVE N2 TO X2 などとやっていけたりするのでしょうか。 いったいどうなるのでしょう、いろいろ書いちゃいましたけど、各々の転記の仕組みを教えてください。 また、COBOLの(お堅い規格を書き写しただけでない)解説のサイトなどあれば、ご紹介いただけますでしょうか。

  • COBOLについて

    COBOL初心者なのですが。 COBOLで 01 A.   03 B PIC 9(02).   03 C PIC X(02). MOVE  SPACE  TO  A. とした時、基本項目であるBには何が入っているのでしょうか? 数字項目にSPACEというのはありえないですよね。 どなたかわかる方、教えていただけませんか?

  • COBOLの文字列検索を教えて下さい。

    cobol初心者です。 「100バイトのレコードを複数件読み込み、決まった文字列を検索する」というPGMを作ろうとしています。 03 REC-1 PIC X(100) 03 REC-2 PIC X(05) という定義があるとき REC-1 = "abcdefghijklmnopqrstu…"       というデータに対して、 REC2 = "hijkl"                    の検索をしたい場合 どのようなコーディングで調べることができるのでしょうか? 何レコード目の何バイトでヒットしたかを表示したいので、 INSPECT命令は使用せず、REC-1を1バイト単位で取り出して、 1文字ずつ判定しようと思っています。 レコードを越えてのヒットは行いません。 この場合配列を使うという考え方は正しいですか? 読み込んだ100バイトのレコードを1バイト単位で取り出して比較するには、 REDEFINEを用いて再定義すると考えています。 その場合のREADでの読み込み方がよくわかりません。 コーディング例等を載せてもらえると助かります。 cobolをはじめたばかりで、基本的な知識が抜けているかもしれません・・・ よろしくお願い致します。

  • Excel操作(数値型パーセントの表示を文字列に)

    現在、セルに 10.5% と表示されている数値型データをそのまま文字列の"10.5%"に換えるにはどうしたらよいでしょうか。 今は、文字列にすると、0.105 のように小数点表示に切り替わってしまいます。

  • エクセル 文字列で入力した数字を数値にする

    エクセルで、文字列の設定で入力した数字は、[セルの書式設定]で、数値として設定しても、文字列のままになります。 (セルの左上に、文字列と分かる緑の三角が付いたままになり、表を作ってもグラフの表示は出来ません。) 数値として数字を入力をした後、[セルの書式設定]で文字列にして、再び[セルの書式設定]で数値にすると、数値にはなります。 (この場合、文字列にしても、セルの左上に緑の三角が付かず、このまま表を作ると数値(小数点以下が0の場合は小数点以下が削除されます。)の扱いとなりグラフの表示が出来ます。) 文字列で入力した数字は、数値にはならないのでしょうか? よろしくお願いいたします。

  • 文字列が数値に変換されない

    文字列の数字をVALUE関数で数値に変換したくても数値になりません。 ♯N/Aと表示されるだけです。 関数を入れたあとに表示形式を数値にしても変わりません。 元の文字列はVLOOKUP関数で検索した数字です。 これができないと仕事が進みません。急いでます。お願いします。

  • Excelの数値を文字列にするにはどうしたらいいですか?

    セルの[表示形式]→[ユーザー定義]を利用して #/12 と設定して分数を表示しているセルがあります。 例えば 8/12 という表示になっていても、中身は計算式ですから、数値としては 0.666666・・・ となっている訳です。 これを、表示通りの文字列 8/12 または大文字で 8/12 と変換する方法はありませんか? ぜひ教えてください。 よろしくお願いします。

  • 一度認識された文字列は他の形式に変えることは不可?

    一旦表示形式「文字列」で入力されたものは「数値」扱いに変更しても訂正されないのでしょうか? 各電気会社の単価をHPから転記してExcelで一覧表を作成しているのですが、表内には上記のとおりたとえば280円80銭については、280.8円や280.80円など、表現上でのばらつきがあります。そこで表示形式で小数点を合わせるユーザー定義で「??.??」または「0.00」と設定してみましたが、「0」については「0」のままでした。 そこで「数値」で設定しようと(「小数点以下の桁数」を「2」と入力し、「負の数の表示形式」を適当に(-1234.10などと))してみましたが、やはり結果は変わりません。0は0のままなんです。0.00円になるかと思ったのですが… これは数字をすべてからHP転記したためだと思われます。実際「数値が文字列として保存されています」というエラーも表示されています。 次に一括して「数値」で設定してみたところ、表示形式上では「数値」になっているのですが、実質的には文字列のままです(エラー表示が取れないのは変わりありません)。 入力の際に文字列として認識されてしまいますと文字列は変更することができないのでしょうか。でなければ最初から全部打ち直しです(´;ω;`)

  • pro*cobol ⇔ oracle のデータ型の扱い

    お世話になります。 pro*cobolで、テーブルの作業領域を定義し、 データの編集後、oracleのテーブルへ出力している のですが、cobol側の定義はpic9タイプで oracleの項目定義ではCHAR型になっております。 この状態で、cobol側のpic9タイプの項目に "A00001"等文字を含む値を設定した所、 ABENDせずにoracleテーブルに"A00001"の 項目値を出力しています。 cobolだけに限れば、属性エラーなのですが、 この場合、oracleの項目定義が優先されるのでしょうか? よろしくご教授の程、お願い申し上げます。

  • 文字列を数値として認識させる方法

    Excelで次のような表を作っています。 項目A 1 項目A 1 項目B 2 項目A 1 項目C 1 このように並んでいる表を集計して、次のようにまとめます。 項目A 3 項目B 2 項目C 1 最初にデータを入力するとき、ほとんどの数値は「1」なので、項目を入力したら数値「1」が自動的に入力できるよう次の関数を使っています。 =IF(ISTEXT(A1),"1","") そして、2以上の数値が必要な場合は、「1」と自動入力されたところに、正しい数値を上書きして入力しています。 このとき、上書きした数値は数値として集計に反映されていますが、自動入力された「1」は文字列と判断されているようで、集計に反映されていません。 自動入力された「1」を数値として認識させるには、どのようにしたらいいでしょうか?

専門家に質問してみよう