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