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

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

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

COBOLで文字タイプのフィールドのデータを文字コードで指定(数値タイプでの演算結果で指定)するにはどうしたらいいのでしょうか?

このQ&Aに関連する最新のQ&A

計算 文字」に関するQ&A: 文字式の計算順序

A 回答 (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”が結果表示されます。
    • good
    • 0
この回答へのお礼

ありがとうございます。

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

未だに暗黙の型変換に慣れることができませんが、これからもがんばります!

お礼日時:2001/11/27 03:14

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"になるようにしています。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q文字コードを指定する際sjisなのかshift_jisかshift-jisなのか

お世話になります。
perl5.8において文字コードを指定or変換する際
shift_jis
shift-jis
Shift_JIS
SJIS
EUC_JP
EUC-JP
utf-8
utf8
-と_の違いや大文字小文字の違いなど記述の違いを良く見かけるのですが、実際決まった指定方法などはあるのでしょうか。
逆に文字コードを指定する際、●●のように指定しても無効で●●のように指定しないと有効ではないですよ。。みたいな。

またperlに限らずPHPやHTML、XMLなどではどうなっているのでしょうか

どなたかご存知の方いましたら
・上記3つの文字コードについてと
・perlのバージョンの違い、言語の違いなど

文字コードの文字列の指定に関する全般についてご教授願えませんでしょか。

宜しくお願い致します。

Aベストアンサー

文字コードを指定するモジュールによって、指定する文字列が違う場合があります。

たとえば、JcodeでシフトJISコードを指定するときはは'sjis'ですが、
Encodeでは次のような正規表現になります。

/\bshift.*jis$/i
/\bsjis$/i

これは、shift-jisでもShift_jisでもsjisでもSJISでもマッチします。
極端な話、shift(・∀・)jisでもマッチします(多分)

他の文字コードでも同様に正規表現でエイリアスが設定されていますので、詳しくはEncodeモジュールのperldocを参考にしてください。

QS9タイプからXタイプにデータは移行できるのか。(COBOL)

こんにちは。
まったくのCOBOLビギナーで困っています。
私がしたいことは、
S9タイプのデータを、Xタイプに移すということです。
元データには'40'(16進数)というデータが入っています。
これは +0 という意味だとおもいます。

これを、Xタイプにムーブして、
'0'と出したいわけです。

'0'を出す為には、'30'(16進数)であればいいことは
バイナリで確認しています。

単純にMOVEを書けても、これは、'@'になってしまいます。
S9→X への移行ってできるものなのでしょうか?

知っている方がいらっしゃったらご教授ください。

Aベストアンサー

こんばんは。

タイプの違う項目は、直接 MOVE しない方が良いと思います。
たとえば、こんなやり方はいかがでしょうか。

01 A PIC S9.
01 B-X.
  03 B PIC 9.

と定義しておいて、A を B に MOVE 後、B-X を見ると "0" だと思うのですが。
ちなみに、B を 9(2) としますと、B-X は "00"となり、
B を Z9 とすれば、" 0" になると思います。

COBOL もホストメーカーが違うと、拡張機能の関係で微妙に違ったりするので、不安なんですが。
ご参考までに。

Q文字コードEUC→SHIFT-JISにすると動作しません

http://cgikon.com/search/detail.php3?menu=1&cgi_id=412

上記の簡単なスクリプトを使いたいと思っています。
文字コードがEUCとなっており、そのままの状態で設置すれば動作します。

EUCではなく、SHIFT-JISにして動作させたいのですが、中に書かれている「EUC - JP」を「SHIFT - JIS」に書き換えて、またファイルの文字コードも「SHIFT-JIS」として保存しました。
またCSVデータも「SHIFT-JIS」に変換して保存。

変換したファイルをアップしてみましたが、表示される表の数値の箇所が真っ白になってしまいます。
一番上の行と一番左の列は表示されます。
足し算される数値の部分だけが表示されません。

どのようにすれば、EUCからシフトJISに変換して、動作させる事ができるのでしょうか。


アドバイスをお願い致します。

Aベストアンサー

> なぜシフトJISにすると、全角スペースがあるとダメだったのか分かりませんが、とりあえず解決して良かったです。

ShiftJISの場合、全角空白は 0x81 0x40 という並びです。

>echo " "|hexdump
00000000: 22 81 40 22 0A ".@".

見事に '@' が隠れているのでこれが誤動作の引き金になりえます。

Qverilog HDLの[=]と[<=]の使い分け

現在Verilog HDLを勉強しており、ひと通り勉強は終わりました。
しかしブロッキング代入[=]とノンブロッキング代入[<=]の使い分けをどこまで暗記すれば良いのか分かりません。
皆様は、[=]と[<=]の使い分け、あるいはネット型、レジスタ型への代入をする際の区別をどのように暗記していますか?「このポイントを理解すれば大丈夫!」みたいなことを教えていただけると助かります。

今思いつく例としては↓のとおりです
・assign文では[=]を使用しなければならない。
・assign文の左辺は[ネット型]のみ
・case文のHPによって[=]を使用しなければならない。
・ http://veri.jp/ba_nba.html のHPの最後のほうで『ほかにも「assign 文では NBA "<=" が使えません」という誤った注意書き』と書いてありますが、この記述の意味がわかりません。
・回路記述ではダメなのに、シミュレーション記述では問題がない等等、、、
他にもfunction文やalways文の中で式を書く時にも困っています。

Aベストアンサー

> http://veri.jp/ba_nba.html
こんな良い解説ページを見つけたのに、なぜ質問しているのかがよく分かりませんが・・・。

まずassign文は継続的代入であって、ブロッキング代入でもノンブロッキング代入でもないので、
ブロッキング代入とノンブロッキング代入の使い分けという議論の対象外です。

また、ブロッキング代入とノンブロッキング代入はレジスタ型に対して使う、
継続的代入はネット型に対して使う、
となるため、型でブロッキング代入とノンブロッキング代入の使い分けなんて言う議論は最初からできないです。(どちらもレジスタ型が相手だから)


解説ページにも書かれていますが、
ブロッキング代入とノンブロッキング代入の違いは、
"右辺の評価" と "左辺への代入" が同時に行われるか、別々に行われるかの違いです。

たとえば、
a = x;
b = a;
としたとき普通のプログラミング言語のように、bもxになって欲しいなら、ブロッキング代入を使いますし、
bにxが代入される前のaの値が入って欲しいなら、ノンブロッキング代入を使うことになります。


always文でFFを生成するときは、その時刻においては代入前の値を参照したい(実際の回路を考えると代入後の値を参照できるのは次のクロックがやってきたときだから)ので、
ノンブロッキング代入を普通は使いますね。
(ブロッキング代入だとレーシング=記述順序で結果が変わってしまうという問題があるというのもありますが。)

それ以外(組み合わせ論理を作るalways、function、シミュレーション記述)は、
特に理由がなければブロッキング代入を使っています(変数を直ちに更新して欲しい場合がほとんどだから)が、
前述のノンブロッキング代入の挙動を理解した上でノンブロッキング代入が必要だと思ったなら
使っていけないわけではないです。

> http://veri.jp/ba_nba.html
こんな良い解説ページを見つけたのに、なぜ質問しているのかがよく分かりませんが・・・。

まずassign文は継続的代入であって、ブロッキング代入でもノンブロッキング代入でもないので、
ブロッキング代入とノンブロッキング代入の使い分けという議論の対象外です。

また、ブロッキング代入とノンブロッキング代入はレジスタ型に対して使う、
継続的代入はネット型に対して使う、
となるため、型でブロッキング代入とノンブロッキング代入の使い分けなんて言う議論は最初からでき...続きを読む

QPostgreSQLの標準文字コードをShift_JISにしたい

CygwinでPostgreSQLを動かしています。
PostgreSQLの標準文字コードをShift_JISにしたいんですが、どうコマンドを打てば良いか分かりません。

本にはEUC-JPを指定する際は
$ initdb -D /usr/local/pgsql/data -E EUC_JP
と打つと書いてありますが、EUC_JPの部分をShift_JISとするとエラーになります。

Shift_JISに設定するにはどのように打てばよいんでしょうか?

Aベストアンサー

PostgreSQLって、サーバ側charsetとしてShift JISは、サポートして無い(即ち、-EでSJISは指定できない)のでは。
代わりに、クライアントとの間でのEUC_JP⇔SJIS自動変換機能を持っていますが。

参考URL:http://www.postgresql.jp/document/pg742doc/html/multibyte.html#CHARSET-TABLE

QCOBOLのS9タイプからXタイプへ変換する過程

はじめましてCOBOL初心者です。
COBOLプログラムにおいて、S9タイプをXタイプに変換するためにはどのようにしたらよいでしょうか。
自分なりに2つの方法を考えてみたのですが、いずれかで可能でしょうか?
(1)
MOVE S9タイプ TO 9タイプ
MOVE 9タイプ  TO Xタイプ

(2)
COMPUTE 9タイプ = S9タイプ * 1
MOVE 9タイプ TO Xタイプ

ご指導よろしくお願いいたします。

Aベストアンサー

どちらでも可能です。
が、(1)の方が他の方が当該プログラムを読む上では理解しやすいでしょう。

QJAVAでのShift-JISとEUC-JP間の文字コード変換ができません

Windows環境で作成した「Shift-JIS(CP932)」のファイルを、
JAVAを使用して「EUC-JP」のファイルに変換したいのですが、
NEC選定文字(13区)等の追加された機種依存文字の変換ができません。

いろいろ調べてみたのですが、
文字コードの呼び方がサイトによってあいまいで、
どのページが正しいのかがわかりません。

・「Shift-JIS(CP932)」「EUC-JP」の正確な情報が記述されたサイト
・JAVAにおける文字コードの変換のノウハウ
に関しての知識をお持ちの方がいましたら、教えてください。

以下は変換に使用したJAVAのソースコードです。

InputStreamReader ins = new InputStreamReader(new FileInputStream(iFile), "windows-31j");
OutputStreamWriter outs = new OutputStreamWriter(new FileOutputStream(oFile), "euc-jp");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}



以上です。
よろしくお願いします。

Windows環境で作成した「Shift-JIS(CP932)」のファイルを、
JAVAを使用して「EUC-JP」のファイルに変換したいのですが、
NEC選定文字(13区)等の追加された機種依存文字の変換ができません。

いろいろ調べてみたのですが、
文字コードの呼び方がサイトによってあいまいで、
どのページが正しいのかがわかりません。

・「Shift-JIS(CP932)」「EUC-JP」の正確な情報が記述されたサイト
・JAVAにおける文字コードの変換のノウハウ
に関しての知識をお持ちの方がいましたら、教えてください。

以...続きを読む

Aベストアンサー

>テキストエディタで、文字コードを「EUC-JP」に設定し「丸付きの1」を記入すると、画面上で確認できてしまいます。

最近のWindowsは内部コードがUnicodeですので画面上で確認できるのは必然ではないかと。
※画面上に出る時点ではメモリ上はUnicodeでファイルに保存する際に符号化されるはずです。

>また、バイナリエディタで作成したファイルを確認したところ、
>「0xADA1」で確認できてしまいます。
>これは、テキストエディタが勝手に「EUC-JP-ms」に変更しているのでしょうか?

そうですね。EUC-JPの種類は良く知らないのですが、
WindowsのShift_JISは純粋なShift_JISではないのと同義でしょう。

>NEC&IBMのベンダ依存文字が「EUC-JP」に定義はされているけど、Windows-31j → Unicode → EUC-JPの変換時に、Unicodeと他の文字コードとの対応の問題があって表示できないのでしょうか?

EUC-JPにベンダ依存文字は定義されていません。
EUC-JP-MSに定義されていてWindowsのEUCはこちらの文字セットを使っているにすぎないようです。
Javaの場合「EUC_JP_Solaris」というのがWindows-31J≧Shift_JISの関係と同様のようです。

参考URL:http://d.hatena.ne.jp/mir/searchdiary?word=*%5BJ2SE%5D

>テキストエディタで、文字コードを「EUC-JP」に設定し「丸付きの1」を記入すると、画面上で確認できてしまいます。

最近のWindowsは内部コードがUnicodeですので画面上で確認できるのは必然ではないかと。
※画面上に出る時点ではメモリ上はUnicodeでファイルに保存する際に符号化されるはずです。

>また、バイナリエディタで作成したファイルを確認したところ、
>「0xADA1」で確認できてしまいます。
>これは、テキストエディタが勝手に「EUC-JP-ms」に変更しているのでしょうか?

そうですね。...続きを読む

QCOBOLで文字タイプを数字タイプに変換する方法

すいませんコボル初心者の者です。周りに聞く人がいずに困っています。
アドバイスよろしくおねがします。

例えば、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)に左詰でセットするために
入力項目の頭のゼロをどう処理していいかもわかりません。
考えても結論がでませんでしたので、投稿しました。
宜しくお願いします。

Aベストアンサー

★ひとつ目の質問。
いろいろと特殊命令を使いますが簡単にコーディングできますし、覚えておくと便利です。

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.



お役に立つかちょっと不安ですが(^^;)
コボル言語は他の言語と違って、ある程度法則を覚えると簡単です。
頑張ってくださいね。

★ひとつ目の質問。
いろいろと特殊命令を使いますが簡単にコーディングできますし、覚えておくと便利です。

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...続きを読む

QEUC⇔Shift_JISの文字コード変換について

DB(OS:win2003、DBMS:MySQL Server5.0  文字コードはEUC)に対して
CSVファイルをインポート、エクスポートしようとしています。
入出力ファイル(CSVファイル)の文字コードはShift_JISのため、
文字コード変換が必要となってきています。

CSVファイルのインポート/エクスポート、文字コード変換は、
php5.2.5で構築しています。

今、エクスポート(EUC→Shift_JIS)したCSVファイルを、
エクセルで確認すると極一部が文字化けしてしまいます。

そこで質問が4つあります。
1.文字化けは仕方ないことなのでしょうか?
2.文字化けする文字を特定することはできるのでしょうか?
3.エクスポート方法、変換方法によって文字化けする文字は変わってくるので
しょうか?
4.みなさんはこのような文字化けの問題をどのように回避した経験お持ちですか?
  (文字化けは已む無し、文字コードを意地でも統一した、
   文字を特定して特殊文字に置き換えたなどなど)

基本的なことと思いますが、よろしくご教授願います。

 (3.4.はもっと詳細がわからないと何とも言えないかもしれません。
  ご回答頂く為には何を調べればいいのかからも教えてください。
  よろしくお願いします。)

DB(OS:win2003、DBMS:MySQL Server5.0  文字コードはEUC)に対して
CSVファイルをインポート、エクスポートしようとしています。
入出力ファイル(CSVファイル)の文字コードはShift_JISのため、
文字コード変換が必要となってきています。

CSVファイルのインポート/エクスポート、文字コード変換は、
php5.2.5で構築しています。

今、エクスポート(EUC→Shift_JIS)したCSVファイルを、
エクセルで確認すると極一部が文字化けしてしまいます。

そこで質問が4つあります。
1.文字化けは仕方...続きを読む

Aベストアンサー

詳しくありませんが
CP932,EUCJPMSを使用することで改善しないでしょうか。

Q「 '&lng='」の&の意味が分かりません。

下記はgooglemapで中心点(lat:緯度 lng:経度)からのある半径(radius)以内のマーカーを求めるプログラムの一部ですが「 '&lng='  '&radius='」に出てくる「&」の意味・機能がわかりません。
どなたかお分かりになれば教えていただきたく。

var radius = document.getElementById('radiusSelect').value;
var searchUrl = 'phpsqlsearch_genxml.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius;

Aベストアンサー

URLパラメータの区切りです。

phpsqlsearch_genxml.php?lat=●●&lng=▲▲&radius=★★


■IT用語辞典 e-Words
クエリ文字列 【 query string 】 クエリストリング / URLパラメータ / URL parameter

http://e-words.jp/w/E382AFE382A8E383AAE69687E5AD97E58897.html


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報