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'.