COBOL資料布局


COBOL布局是使用每個欄位的說明和值出現。以下是在COBOL中使用的資料描述項:

  • 重新定義子句
  • 重新命名子句
  • 用法子句
  • 複寫簿

重新定義子句

重新定義子句用於定義相同的儲存與不同的資料的描述。如果一個或多個資料項都不會同時使用,則在相同的儲存可用於另一個資料項。所以同一個儲存可以被稱為具有不同的資料項。

語法

以下是語法重新定義子句:

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

重新命名子句

重新命名子句用於為現有的資料項賦予不同的名稱。它被用於重新組資料的名稱,並將它們賦予了新名字。新的資料名稱可以跨組或基本專案重新命名。 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級數。用於重新命名資料名稱必須為一個序列。當前子句資料項不能被重新命名。

例子

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

用法子句

用法子句通知,其中格式資料被儲存在作業系統。它不能用於具有66或88級數。如果用法子句在組中指定了所有的基本專案將有相同的用法子句。以下是不同的選擇和使用子句:

顯示

資料項被儲存在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

資料項是類似於實數或浮點數,並表示為單精度浮點數。內部資料儲存在十六進位制格式。在這種不指定PIC子句。在這裡,1字等於4個位元組。

COMP-2

資料項是類似龍或雙並表示為雙精度浮點數。內部資料儲存在十六進位制格式。在這種不指定PIC子句。這2個字等於8個位元組。

COMP-3

資料項是包十進位制格式儲存。每個數位占半個位元組(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語句用在工作-儲存部分。

例子包顯示複寫簿的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'.