Cobol-data-layout
COBOL-データレイアウト
COBOLレイアウトは、各フィールドの使用とそのフィールドに存在する値の説明です。 以下は、COBOLで使用されるデータ記述エントリです-
- 句の再定義
- 句の名前を変更
- 使用条項
- コピーブック
句の再定義
Redefines句は、異なるデータ記述でストレージを定義するために使用されます。 1つ以上のデータ項目が同時に使用されない場合、同じストレージを別のデータ項目に使用できます。 そのため、同じストレージを異なるデータ項目で参照できます。
構文
以下は、再定義句の構文です-
01 WS-OLD PIC X(10).
01 WS-NEW1 REDEFINES WS-OLD PIC 9(8).
01 WS-NEW2 REDEFINES WS-OLD PIC A(10).
以下は、使用されるパラメータの詳細です-
- WS-OLDは再定義されたアイテムです
- WS-NEW1およびWS-NEW2はアイテムの再定義です
再定義されたアイテムと再定義されたアイテムのレベル番号は同じである必要があり、66または88のレベル番号であってはなりません。 再定義アイテムでVALUE句を使用しないでください。 ファイルセクションでは、01レベル番号の再定義句を使用しないでください。 定義の再定義は、再定義する次のデータ記述でなければなりません。 再定義するアイテムは、常に再定義するアイテムと同じ値を持ちます。
例
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-DESCRIPTION.
05 WS-DATE1 VALUE '20140831'.
10 WS-YEAR PIC X(4).
10 WS-MONTH PIC X(2).
10 WS-DATE PIC X(2).
05 WS-DATE2 REDEFINES WS-DATE1 PIC 9(8).
PROCEDURE DIVISION.
DISPLAY "WS-DATE1 : "WS-DATE1.
DISPLAY "WS-DATE2 : "WS-DATE2.
STOP RUN.
*JCL* 上記のCOBOLプログラムを実行します-
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
WS-DATE1 : 20140831
WS-DATE2 : 20140831
句の名前を変更
Renames句は、既存のデータ項目に異なる名前を付けるために使用されます。 データ名を再グループ化し、新しい名前を付けるために使用されます。 新しいデータ名は、グループまたは基本項目にわたって名前を変更できます。 レベル番号66は、名前変更のために予約されています。
構文
以下は、名前変更句の構文です-
01 WS-OLD.
10 WS-A PIC 9(12).
10 WS-B PIC X(20).
10 WS-C PIC A(25).
10 WS-D PIC X(12).
66 WS-NEW RENAMES WS-A THRU WS-C.
名前の変更は、同じレベルでのみ可能です。 上記の例では、WS-A、WS-B、およびWS-Cは同じレベルにあります。 名前変更定義は、名前を変更する次のデータ記述でなければなりません。 01、77、または66のレベル番号で名前の変更を使用しないでください。 名前の変更に使用されるデータ名は順番に並んでいる必要があります。 occur句を含むデータ項目の名前は変更できません。
例
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-DESCRIPTION.
05 WS-NUM.
10 WS-NUM1 PIC 9(2) VALUE 20.
10 WS-NUM2 PIC 9(2) VALUE 56.
05 WS-CHAR.
10 WS-CHAR1 PIC X(2) VALUE 'AA'.
10 WS-CHAR2 PIC X(2) VALUE 'BB'.
66 WS-RENAME RENAMES WS-NUM2 THRU WS-CHAR2.
PROCEDURE DIVISION.
DISPLAY "WS-RENAME : " WS-RENAME.
STOP RUN.
*JCL* 上記のCOBOLプログラムを実行します-
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
上記のプログラムをコンパイルして実行すると、次の結果が生成されます-
WS-RENAME : 56AABB
使用条項
Usage句は、形式データが保存されるオペレーティングシステムを指定します。 レベル番号66または88では使用できません。 グループに使用法句が指定されている場合、すべての基本項目は同じ使用法句になります。 Usage句で使用できるさまざまなオプションは次のとおりです-
表示
データ項目はASCII形式で保存され、各文字には1バイトが必要です。 デフォルトの使用法です。
次の例では、必要なバイト数を計算します-
01 WS-NUM PIC S9(5)V9(3) USAGE IS DISPLAY.
It requires 8 bytes as sign and decimal doesn't require any byte.
01 WS-NUM PIC 9(5) USAGE IS DISPLAY.
It requires 5 bytes as sign.
計算/COMP
データ項目はバイナリ形式で保存されます。 ここで、データ項目は整数でなければなりません。
次の例では、必要なバイト数を計算します-
01 WS-NUM PIC S9(n) USAGE IS COMP.
If 'n' = 1 to 4, it takes 2 bytes.
If 'n' = 5 to 9, it takes 4 bytes.
If 'n' = 10 to 18, it takes 8 bytes.
COMP-1
データ項目は実数または浮動小数点数に似ており、単精度の浮動小数点数として表されます。 内部的には、データは16進形式で保存されます。 COMP-1はPIC句を受け入れません。 ここで、1ワードは4バイトに相当します。
COMP-2
データ項目はLongまたはDoubleに似ており、倍精度の浮動小数点数として表されます。 内部的には、データは16進形式で保存されます。 COMP-2はPIC句を指定しません。 ここで、2ワードは8バイトに相当します。
COMP-3
データ項目はパック10進数形式で保存されます。 各桁は半バイト(1ニブル)を占有し、符号は右端のニブルに格納されます。
次の例では、必要なバイト数を計算します-
01 WS-NUM PIC 9(n) USAGE IS COMP.
Number of bytes = n/2 (If n is even)
Number of bytes = n/2 + 1(If n is odd, consider only integer part)
01 WS-NUM PIC 9(4) USAGE IS COMP-3 VALUE 21.
It requires 2 bytes of storage as each digit occupies half a byte.
01 WS-NUM PIC 9(5) USAGE IS COMP-3 VALUE 21.
It requires 3 bytes of storage as each digit occupies half a byte.
コピーブック
COBOLコピーブックは、データ構造を定義する一連のコードです。 特定のデータ構造が多くのプログラムで使用されている場合、同じデータ構造を再度書き込む代わりに、コピーブックを使用できます。 COPYステートメントを使用して、コピーブックをプログラムに組み込みます。 COPYステートメントは、WorkingStorageセクションで使用されます。
次の例では、COBOLプログラム内にコピーブックが含まれています-
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY ABC.
ここで、ABCはコピーブック名です。 ABCコピーブックの次のデータ項目は、プログラム内で使用できます。
01 WS-DESCRIPTION.
05 WS-NUM.
10 WS-NUM1 PIC 9(2) VALUE 20.
10 WS-NUM2 PIC 9(2) VALUE 56.
05 WS-CHAR.
10 WS-CHAR1 PIC X(2) VALUE 'AA'.
10 WS-CHAR2 PIC X(2) VALUE 'BB'.