前回:COBOL記載方法まとめ 【初心者編】1
https://qiita.com/nano357/items/462a3ec523a3e624340b
②COBOLのデータ構造
以下の2つがある
集団項目・・・一つ以上の基本項目が集まった項目
基本項目・・・基本データ型を持つ
**************************************************************************
01 HR-AREA. これが集団項目
03 EMPLOYEE-NAME. これも集団項目
05 NUMBER PIC 9(6). これが基本項目
05 FULL-NAME.
07 FAMILY-NAME PIC X(30).
07 NAME PIC X(30). これも基本項目
③データ型の種類
PIC(PICTURE句)の右側にタイプ識別子を記載する。
例
文字
X(3) 英字3文字(3バイト)
N(3) 日本語3文字(6バイト)
挿入
XXXBXXX 英字3文字、空白、英字3文字(7バイト)
NNNBNNN 日本語3文字、空白、日本語3文字(14バイト)
数値
9(3) 数字3文字(3バイト)符号なし
999V99 数字3文字、仮想小数点、数値2文字(5バイト)符号なし
S999 数字3文字(3バイト)符号あり
※ S はSIGN句を記載して、演算符号の格納位置を指定した場合は、バイト数を使用する。
挿入
99.9 数字2文字、実小数点、数字1文字(4バイト)符号なし
999,9 数字3文字、カンマ、数字1文字(5バイト)符号なし
99/99 数字2文字、スラッシュ、数字2文字(5バイト)符号なし
ZERO(0)制御用
ZZZ9 数字4文字(4バイト)符号なしで、左側の有効桁数がなければ空白にする。
***9 数字4文字(4バイト)符号なしで、左側の有効桁数がなければ * にする。
④データ型の属性
BINARY
USAGE句にCOMP 又はBINARYを指定する場合は
2進形式となり、整数(小数点を含まない)の計算処理の
速度を向上させることができる。
例
01 NUM1 PIC 9(4).
01 NUM2 PIC 9(4) USAGE BINARY.
MOVE 1234 TO NUM1 NUM2
16進数(HEX)で表示すると。
NUM1 は F1F2F3F4 ・・・ 4バイトで数値4文字が表現される。
NUM2 は 04D2 ・・・ 2バイトで数値4文字が表現される。(半分)
ただし、物理的に格納するファイルには、使用しない。
エンディアンという、データの並び
データをバイト単位で見たときに、最初から並べるか最後から並べるか)があり
以下の通り、CPUのアーキテクチャ・設定により異なるため。
ビッグエンディアン 04D2 ・・・最上位(前)ビットを低位のメモリアドレスへ格納(バイナリダンプ上は正順)
リトルエンディアン D204 ・・・最下位(後)ビットを低位のメモリアドレスへ格納(バイナリダンプ上は逆順)
DISPLAY
USAGE句になにも指定しない又はDISPLAYを指定する場合は
外部10進形式となり、1バイトで数値1文字が表現される。
符号無しの場合は、通常の文字列と同じ形式で表現します。
符号有りの数値を表現する場合は、最後の桁の上位4ビットの値により符号を表現します。
例
01 NUM3 PIC 9(4) USAGE DISPLAY.
01 NUM4 PIC S9(4) USAGE DISPLAY.
MOVE 1234 TO NUM3
MOVE -1234 TO NUM4
16進数(HEX)で表示した場合の例 「IBM互換機のメインフレーム(EBCDIC)」
(符号有りの表現形式はベンダ各社で異なる)
NUM3 は F1F2F3F4 ・・・ 4バイトで数値4文字が表現される。(FでなくCの場合もある)
NUM4 は F1F2F3D4 ・・・ 4バイトで数値4文字が表現される。
COMP-3
USAGE句にCOMP-3 又はPACKED-DECIMALを指定する場合は、内部10進形式となる。
(バイト数の節約が出来て、かつ16進数で表示すれば内容が理解可能)
例
01 NUM5 PIC 9(8).
01 NUM6 PIC 9(8) USAGE BINARY.
MOVE 12345678 TO NUM5 NUM6
16進数(HEX)で表示すると。
NUM5 は F1F2F3F4F5F6F7F8 ・・・ 8バイトで数値8文字が表現される。
NUM6 は 012345678C ・・・ 項目バイト数 / 2 + 0.5 = 4.5の切り上げで
5バイトで数値8文字が表現される。
次回:COBOL記載方法まとめ 【初心者編】3
https://qiita.com/nano357/items/3586522c191ca2a964a0
参考文献
COBOL関連情報サイト様
http://www.kitagawa-hanga.com/se/index.html
https://www.shakaijintanaka.com/comp-cobol/
謝辞:「いかなる組織体も、自由な教育用説明書その他の目的でCOBOL 報告書とその仕様との一部または全部を複製し、また報告書の着想を利用してかまわない。 ただし、その文書の序文の一部にこの部分を掲載されたい。
書評などで短い文章を引用するときは出所についての謝辞にCOBOLの名称をあげれば全文をかかげる必要はない。
COBOLは産業界の言語であって、いかなる会社、会社団体、組織、組織団体の所有物ではない。各寄与者、COBOL委員会とも、 プログラミングシステムと言語の正確性や機能について、いかなる保証も与えない。またこれに関する事項についていかなる責任も負わない。
COBOL 保全の手続きははっきりしている。変更を提案する手続きについての照会はデータ組織言語会議の理事会にあてられたい。
ここで利用した以下の資料すなわち、
FLOW-MATIC(スペリーランド社の商標)
Programming for UNIVAC(R) Ⅰ and Ⅱ
Data Automation Systems
スペリーランド社、1958年,1959年版権;
IBM Commercial Translator
No.F28-8013
IBM社、1959年版権;
FACT
DSI27 A 5260-2760
ミネアポリス・ハネウエル社、1960年版権;
この著者、版権者はCOBOL 仕様書に一部または全部を利用することを許可した。このことはプログラミング説明書や類似の出版物にCOBOL 仕様書を複製、利用する場合にも適用される。」
ここで、本解説書およびCOBOL 処理プログラムの作成者とそれの使用者は、CODASYL COBOL委員会と各寄与者の努力と成果を高く評価するとともに感謝の意を表すものであります。