こんばんわ。
現在研修をしており、COBOLの勉強をしております。
COBOLを他言語に置き換える作業を後に担当することになるようです。何の言語かは聞いておりません。勉強している中いくつかわからない点がでました。ご教授いただければと思います。
S9(6)というデータ型は符号ありの整数ということは調べました。
ファイルレコード内に上記のデータ型が存在し、出力ファイルを調べると「00000A」
という値が出力されていました。
ここでふと思ったのがAって何だ?と思いました。そもそも10進数なのか?という疑問が出て
調べるとゾーン10進数という特殊な数値のようです。
ゾーン10進数を調べても全然意味がわかりません。ゾーン部を○○とする!とかゾーン10進数の説明している記載がありますがCOBOLにはそんな記述ないし・・・
とまぁ私が知りたいのはS9(6)というデータ型をどう他言語(C言語)でどう実現しようかという内容がしりたいです。また「00000A」は実際の10進数ではどういう数値かというのも知りたいです。
以上、お手数ですがどうかよろしくお願い致します。
No.7ベストアンサー
- 回答日時:
00000A→000001+
00000B→000002+
00000C→000003+
・
・
00000K→000002-
00000L→000003- となります。
KKKKKK→111111-
KLKLKL→121212- ではありません。最終桁にのみ、符号が乗るのです。
111111- なら 11111J
121212- なら 12121K です。
注意>0+は'{', 0-は'}'です。AやJではありません。
データを変換なさるのですか?
ならば、最終桁だけ変換が必要です。
No.8
- 回答日時:
#4です。
補足ありがとうございます。まず EBCDIC と思って間違い無さそうですね。既に回答が付いていますので、少しだけ。
しつこい様ですが、慣れるまでは1バイト上下2段の16進表記で考えた方が良いと思いますよ。
例えば、-121212 の場合、下記の様になります。
F F F F F D ← 1~5桁は「F」固定。6桁目は「C」(+)か「D」(-)
1 2 1 2 1 2 ← 下の段には十進数の数値がそのまま入る
上の段(上位4bit)が「F」の場合は、EBCDICでは下の段(下位4bit)の値そのものの数字になります。
最後の桁は上の段(上位4bit)が「C」か「D」になりますが、「C」の場合はEBCDICでは「{」とA~I、「D」の場合はEBCDICでは「}」とJ~Rとなります。
従ってこの場合は、文字列表現が「12121K」となります。
逆に考えると、文字列表現で、1~5桁に数字以外のものが含まれる場合や、6桁目に「{}」とA~R以外の文字が入っている場合は S9(6) としては不正です。
なお、環境によっては「{」「}」と書いたところが別の文字になる場合も有るようです。
それから、実際の変換作業では、データがEBCDICのまま来るのかASCII等に変換されて来るのかでかなり変わってくると思いますよ。
参考URL:http://www.ffortune.net/comp/develop/data/kazu.htm
No.5
- 回答日時:
お疲れ様です。
以前に回答を寄せたQAですが
少しは参考に為るかと思います。
http://oshiete.goo.ne.jp/qa/7985639.html
参考URL:http://oshiete.goo.ne.jp/qa/7985639.html
No.4
- 回答日時:
まず、どんな環境でどの様にファイルを表示した際に「00000A」と表示されたのか補足して下さい。
また、今日日の一般的なPCやUNIX系OSの文字コードはASCII系統ですが、COBOLがよく使われる汎用機の環境では全く異なるEBCDICという系統の文字コードで有ることも多いですので、分かれば文字コードも書いて下さい。
http://ja.wikipedia.org/wiki/EBCDIC
http://www.hitachi.co.jp/Prod/comp/soft1/manual/ …
ただ、断定は出来ませんが、#1さんの書かれている通り、EBCDICで+1を表したものという線が強いかと思います。
EBCDICの「00000A」を、16進数表記で1バイトを上下2段にして書くと下記の様になります。
F F F F F C
0 0 0 0 0 1
下の段はそのまま符号を除いた値になると考えて下さい。
上段の1~5桁目の「F」(1111)はゾーンといって数値である事を表しているだけです。最後の桁の「C」(1100)はプラスで有ることを表しています。マイナスの場合は「D」(1101)です。
ただし、「F」「C」「D」は文字コードや環境によっては違う値になる場合も事も有ります。
参考URL:http://www.ffortune.net/comp/develop/data/kazu.htm
この回答への補足
現在会社から与えられたCOBOLソースを眺めて解析しているだけの状態です。その為COBOLの開発環境はありませんです。
ただソースを見るとEBCDICという表記があるのでEBCDICだと思います。
No.3
- 回答日時:
No1です。
>1バイト(8ビット)の下位4ビットで表現出来ます。
> (0000,0001,0010,0011,0100,0101,0110,0111,1000,1001)
↑
0000が抜けていました。m(__)m
No.2
- 回答日時:
ゾーン十進数とは、8bitずつで十進1桁を表して、それぞれの桁の下4bitが数字を表します。
下4bitは必ず0~9です。なので、00 00 0A というのはあり得ません。おそらく S9(6) ではなくてさらに comp とかついてたのでは?
comp ・・・・ 二進数の整数 ( Cだと int とか short int とか long long int とか)
comp-1 ・・・・ 単精度実数 ( Cだと float )
comp-2 ・・・・ 倍精度実数 ( Cだと double )
comp-3 ・・・・ パック十進数 ( Cの型には無し )
しかし、どれにしても、00 00 0A というのは変ですね。なんか間違えてませんか?
あと、どこのメーカーのCOBOLですか?
No.1
- 回答日時:
S9(6)ですが、6バイト使います。
10進数ですから、1バイト(8ビット)の下位4ビットで表現出来ます。
(0001,0010,0011,0100,0101,0110,0111,1000,1001)
上位4ビットは1111が入っていますが1の位のみ、符号が入っています。
(1111は符号なし、1100が+、1101が-です。
一の位以外は
f0,f1,f2,f3,f4,f5,f6,f7,f8,f9で格納され、EBCDICコードにより0,1,2,3,4,5,6,7,8,9と判断されます。
一の位は+の時、
c0,1,c2,c3,c4,c5,c6,c7,c8,c9で格納され、EBCDICコードにより{,A,B,C,D,E,F,G,H,Iとなります。
位置の位が-の時、
d0,d1,d2,d3,d4.d5.d6.d7.d8.d9で格納され、EBCDICコードにより},J,K,L,M,N,O,P,Q,Rとなります。
ということで、00000Aは000001+でした。
C言語になさるなら、intでいいですよ。ただし、7桁入るときは6桁に切られることをお忘れなきよう。
この回答への補足
なんとなく理解できたのですが、一番知りたいことは
00000A→000001+
これをCで実現する場合、相互の変換プログラムが必要だと思います。それをどう実現するかです。
上記の回答だけを見ると
00000A→000001+
00000B→000002+
00000C→000003+
・
・
00000K→000001-
00000L→000002-
という変換になる感じですが合ってますでしょうか?
KKKKKK→111111-
KLKLKL→121212-
という変換になるという認識ですが・・あってるかな
これが合ってる場合文字1文字1文字見て行って変換する処理にしようかと考えています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EBCDIC⇒SJIS変換の方法
-
「彡」って文字はなんという文...
-
セル内の文字列が日本語か英語...
-
COBOLによる全角・半角混...
-
CASLⅡ 文字データから数値デー...
-
ExcelVBA実行後に時々落ちる
-
EBCDICをASCIIに変換したい
-
VS 2008(VB.NET)
-
std::stringからLPCWSTR型への変換
-
sedで日本語の置換方法について
-
英数字を含む文字列(0-9,A-Z)...
-
文字コードshift-jisへの変換に...
-
VBScript ASC関数:文字エンコ...
-
文字列を数字に変換する暗号化方式
-
富士通専用30pinディスプレィ端...
-
VB6.0のコードエディタでの改行...
-
error C2679 がとれません><
-
PL/SQLでSJISの文字コードを取...
-
データベースの形式を認識でき...
-
相対パスを絶対パスに変換したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EBCDIC⇒SJIS変換の方法
-
「彡」って文字はなんという文...
-
セル内の文字列が日本語か英語...
-
std::stringからLPCWSTR型への変換
-
ExcelVBA実行後に時々落ちる
-
VS 2008(VB.NET)
-
Symfowareでのデータ型変換につ...
-
2バイト文字をJEFからSJISに変...
-
数字5桁文字コード?
-
sedで日本語の置換方法について
-
英数字を含む文字列(0-9,A-Z)...
-
COBOLによる全角・半角混...
-
画像データ(png)をcsvファイル...
-
CString ←→ BSTRの変換について
-
JIS → S-JIS コード変換するには
-
PL/SQLでSJISの文字コードを取...
-
数値のパック10進数の変換に...
-
ふりがなをアルファベット化す...
-
latin-1 (ISO-8859-1)への変換
-
byte配列の内容をstringにコピ...
おすすめ情報