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”が結果表示されます。
ありがとうございます。
バイナリ表現で手間取りましたが、何とかうまくいきました。
未だに暗黙の型変換に慣れることができませんが、これからもがんばります!
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Java java 入力された文字列を数値に置き換えて整数にし、計算をしたいです。 <を10として /を1とし 4 2022/05/16 21:08
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- Excel(エクセル) エクセルで文字列と数字が混在する列に書式設定したい。 3 2022/12/19 09:11
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- その他(プログラミング・Web制作) COBOL数値転記をCOPY句内での仕様 6 2022/06/15 18:48
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのフィールド名に半角括...
-
2つ目のレコードの値を取得す...
-
AccessのDAOでフィールド名を配...
-
日付と文字列を条件としてDLook...
-
フィールド名の指定でエラー
-
アクセス ADO Null以外のレコ...
-
ACCESSのフィールドデータの照...
-
SQLでフィールド番号を指定する...
-
ACCESS VBA Parametersで or演...
-
DataTableに特定のフィールドが...
-
INT64対応のprintf系関数はあり...
-
accessでフィールド追加のあと...
-
ACCESSで日別集計をする場合
-
Accessの画像挿入のVBAコード
-
クリスタルレポートの式フィー...
-
フィールド名をループの添え字...
-
Access :ALTER TABLE で作成...
-
ノーツ:ユーザ名から別名を取...
-
AS/400の論理ファイルで年度だ...
-
Access Dcount関数で引数が指定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
accessでフィールド追加のあと...
-
INT64対応のprintf系関数はあり...
-
DataTableに特定のフィールドが...
-
Accessのフィールド名に半角括...
-
2つ目のレコードの値を取得す...
-
AccessのDAOでフィールド名を配...
-
クリスタルレポートで困ってい...
-
テーブルのデータ型の変更がで...
-
Access 2010で実行時エラー3061
-
日付と文字列を条件としてDLook...
-
2次元のdictionary
-
ACCESSで日別集計をする場合
-
Access VBA 添付型フィールド
-
SQLで複数のテーブルと結合した...
-
クリスタルレポートで文字列の...
-
ACCESSで視覚的タイムテーブル...
-
アクセス ADO Null以外のレコ...
-
アクセスでADO 並べ替えが適用...
-
AccessVBAで他テーブルのデータ...
-
オートナンバー型を抽出条件に...
おすすめ情報