OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

COBOLで、文字タイプのフィールドを文字コードで指定したい。

  • 困ってます
  • 質問No.112474
  • 閲覧数1394
  • ありがとう数3
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 28% (2/7)

Cで書くと以下のようになるものをCOBOLで実装したいと思っています。
---------------------
int i;
char c[4];

c[3] = '\0';
for (i=0;i<3;i++)
{
c[i] = '0'+i;
}
/* 結果、c = "012"となる。
---------------------

つまり、文字コ-ドを数値タイプのフィールドで計算して、その結果を文字タイプのフィールドに代入したいのです。
COMPUTE句で書いてみると数値タイプを文字タイプに代入できないと怒られてしまい、困ってしまいました。

COBOLで文字タイプのフィールドのデータを文字コードで指定(数値タイプでの演算結果で指定)するにはどうしたらいいのでしょうか?
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル11

ベストアンサー率 36% (128/348)

くまです。
考え方は、プログラマーの設計次第でいろいろあります。一概にこれが回答!とはいえませんが、ご質問の主旨を理解して参考回答させて頂きます。
「考え方」として、COMPUTE を使用すること、これは繰り返しの添え字として利用することと、最後の変数に転送する結果の位置決めとして利用します。
すなわち、
IとCの関係は、1->0、2->1、3->2となるようにしなければなりません。
ここで、別にワーク変数をもたせれば簡単に出来ます。よって、Aという演算結果を別変数に持たせます。そして、書き出せばよいわけです。
注意点として、ご使用の環境がわかりませんのが、今回、部分参照を使用していますので、この命令が使用できる環境か確認ください。

(参考)
01__I__PIC_9(1)_VALUE_ZERO.
01__A__PIC_9(1)_VALUE_ZERO.
01__C__PIC X(3)_VALUE_SPACE.
*
PERFORM___VARYING___I___FROM___1___BY___1___UNTIL___I_>_3
______COMPUTE_A_=_I_-_1
______MOVE___A____TO__C_(I:1)
END-PERFORM.
*
DISPLAY___"結果="__C__UPON__CONS.

"_"は空白です。見にくくなりますが、ごめんなさい。
”012”が結果表示されます。
お礼コメント
banamil

お礼率 28% (2/7)

ありがとうございます。

バイナリ表現で手間取りましたが、何とかうまくいきました。

未だに暗黙の型変換に慣れることができませんが、これからもがんばります!
投稿日時 - 2001-11-27 03:14:14
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル11

ベストアンサー率 77% (214/277)

COBOLの文字コードを数値で表現するときはバイナリを使います。 (特に1文字に対応するバイナリの表現はメーカによって異なり、桁数が違うこともあります。お使いになるCOBOLを確認して下さい。) *字下げしてコードを書きましたが回答は詰まって表示されるようです。 01 C. 03 C-OCC OCCURS 3. 05 C-CHR PIC X(01) ...続きを読む
COBOLの文字コードを数値で表現するときはバイナリを使います。
(特に1文字に対応するバイナリの表現はメーカによって異なり、桁数が違うこともあります。お使いになるCOBOLを確認して下さい。)

*字下げしてコードを書きましたが回答は詰まって表示されるようです。

01 C.
03 C-OCC OCCURS 3.
05 C-CHR PIC X(01).
05 C-COD-RED REDEFINES C-CHR.
07 C-COD PIC 1(08). または 9(08) BINARY.等

コーディング例(繰り返し部)です。

MOVE "0" TO C-CHR (I). または MOVE '0' TO C-CHR (I).
COMPUTE C-COD (I) = C-COD (I) + I.

 *MOVE ZERO TO C.を繰り返しの前で行う方が一般的ですが、例は質問のCと対比させましたので、繰り返しの中での設定とZEROでなく"0"で表現しました。

*繰り返しの中のREDEFINESがエラーになるようでしたらエリアを分けて下さい。

01 C.
03 C-OCC OCCURS 3.
05 C-CHR PIC X(01).
01 W-KEKKA.
03 W-K-COD PIC 1(08).

MOVE "0" TO W-KEKKA. または MOVE '0' TO W-KEKKA.
COMPUTE W-K-COD = W-K-COD + I.
MOVE W-KEKKA TO C-CHR (I).



*Cの結果を"012"になるようにしています。
このQ&Aのテーマ
このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ