アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんばんわ。
現在研修をしており、COBOLの勉強をしております。
COBOLを他言語に置き換える作業を後に担当することになるようです。何の言語かは聞いておりません。勉強している中いくつかわからない点がでました。ご教授いただければと思います。

S9(6)というデータ型は符号ありの整数ということは調べました。
ファイルレコード内に上記のデータ型が存在し、出力ファイルを調べると「00000A」
という値が出力されていました。

ここでふと思ったのがAって何だ?と思いました。そもそも10進数なのか?という疑問が出て
調べるとゾーン10進数という特殊な数値のようです。

ゾーン10進数を調べても全然意味がわかりません。ゾーン部を○○とする!とかゾーン10進数の説明している記載がありますがCOBOLにはそんな記述ないし・・・

とまぁ私が知りたいのはS9(6)というデータ型をどう他言語(C言語)でどう実現しようかという内容がしりたいです。また「00000A」は実際の10進数ではどういう数値かというのも知りたいです。

以上、お手数ですがどうかよろしくお願い致します。

A 回答 (8件)

00000A→000001+


00000B→000002+
00000C→000003+


00000K→000002-
00000L→000003- となります。

KKKKKK→111111-
KLKLKL→121212-  ではありません。最終桁にのみ、符号が乗るのです。

111111-  なら 11111J
121212- なら 12121K です。

注意>0+は'{', 0-は'}'です。AやJではありません。

データを変換なさるのですか?
ならば、最終桁だけ変換が必要です。
    • good
    • 0
この回答へのお礼

よくわかりました。ありがとうございました。

お礼日時:2013/05/10 00:41

#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
    • good
    • 0
この回答へのお礼

なるほど、ありがとうございました

お礼日時:2013/05/10 00:41

No2です。



すいません。00000Aを、十六進表記だと思い込んでいました。
    • good
    • 0

お疲れ様です。


以前に回答を寄せたQAですが
少しは参考に為るかと思います。

http://oshiete.goo.ne.jp/qa/7985639.html

参考URL:http://oshiete.goo.ne.jp/qa/7985639.html
    • good
    • 0
この回答へのお礼

参考にさせていただきます。
ありがとうございました。

お礼日時:2013/05/07 22:37

まず、どんな環境でどの様にファイルを表示した際に「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だと思います。

補足日時:2013/05/07 22:28
    • good
    • 0

No1です。



>1バイト(8ビット)の下位4ビットで表現出来ます。
> (0000,0001,0010,0011,0100,0101,0110,0111,1000,1001)
   ↑
0000が抜けていました。m(__)m
    • good
    • 0

ゾーン十進数とは、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ですか?
    • good
    • 0

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文字見て行って変換する処理にしようかと考えています。

補足日時:2013/05/07 22:36
    • good
    • 0

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