• ベストアンサー

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

Cで書くと以下のようになるものをCOBOLで実装したいと思っています。 --------------------- int i; char c[4]; c[3] = '\0'; for (i=0;i<3;i++) { c[i] = '0'+i; } /* 結果、c = "012"となる。 --------------------- つまり、文字コ-ドを数値タイプのフィールドで計算して、その結果を文字タイプのフィールドに代入したいのです。 COMPUTE句で書いてみると数値タイプを文字タイプに代入できないと怒られてしまい、困ってしまいました。 COBOLで文字タイプのフィールドのデータを文字コードで指定(数値タイプでの演算結果で指定)するにはどうしたらいいのでしょうか?

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

  • ベストアンサー
回答No.2

くまです。 考え方は、プログラマーの設計次第でいろいろあります。一概にこれが回答!とはいえませんが、ご質問の主旨を理解して参考回答させて頂きます。 「考え方」として、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
質問者

お礼

ありがとうございます。 バイナリ表現で手間取りましたが、何とかうまくいきました。 未だに暗黙の型変換に慣れることができませんが、これからもがんばります!

その他の回答 (1)

  • tintagel
  • ベストアンサー率77% (214/277)
回答No.1

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

専門家に質問してみよう