COBOL布局是每個(gè)字段的使用及展現(xiàn)價(jià)值的描述,以下是COBOL中使用的數(shù)據(jù)描述項(xiàng):
重定義子句用于定義具有不同數(shù)據(jù)描述的存儲(chǔ)。如果一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)不被同時(shí)使用,那么可以將相同的存儲(chǔ)用于另一個(gè)數(shù)據(jù)項(xiàng)。因此,可以使用不同的數(shù)據(jù)項(xiàng)來(lái)引用相同的存儲(chǔ)。
語(yǔ)法
以下是重定義子句的語(yǔ)法:
01 WS-OLD PIC X(10). 01 WS-NEW1 REDEFINES WS-OLD PIC 9(8). 01 WS-NEW2 REDEFINES WS-OLD PIC A(10).
以下是使用的參數(shù)的詳細(xì)信息:
重定義項(xiàng)的級(jí)數(shù)和重定義項(xiàng)必須是相同的,它不能是66或88級(jí)數(shù)。不要使用有重定義項(xiàng)的VALUE子句。在文件節(jié)(File section)中,不要使用01級(jí)數(shù)的重定義子句。重定義所定義的必須是你想要重新定義的下一個(gè)數(shù)據(jù)描述。一個(gè)重新定義的項(xiàng)目將始終具有相同的值。
例
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執(zhí)行上述COBOL程序。
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP1 EXEC PGM=HELLO
當(dāng)你編譯和執(zhí)行上面的程序,會(huì)產(chǎn)生以下結(jié)果:
WS-DATE1 : 20140831 WS-DATE2 : 20140831
重命名子句用于給現(xiàn)有的數(shù)據(jù)項(xiàng)賦予不同的名稱。它用于重組數(shù)據(jù)名稱,并給它們一個(gè)新的名稱。新的數(shù)據(jù)名稱可以跨越組項(xiàng)或基本項(xiàng)重命名。級(jí)數(shù)66保留用于重命名。
語(yǔ)法
以下是重命名子句的語(yǔ)法:
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.
重命名只能在同一級(jí)。在上面的例子中,WS-A,WS-B和WS-C是在同一級(jí)。重命名所定義的必須是你想要要重命名的下一個(gè)數(shù)據(jù)描述。不要使用01,77或者66級(jí)的重命名。用于重命名的數(shù)據(jù)名稱必須按順序排列。帶有occur子句的數(shù)據(jù)項(xiàng)不能被重命名。
例
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執(zhí)行上述COBOL程序。
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C //STEP1 EXEC PGM=HELLO
當(dāng)你編譯和執(zhí)行上面的程序,會(huì)產(chǎn)生以下結(jié)果:
WS-RENAME : 56AABB
用法子句指定存儲(chǔ)格式數(shù)據(jù)的操作系統(tǒng)。它不能與級(jí)數(shù)66或88一起使用。如果在組項(xiàng)上指定了用法子句,那么所有的基本項(xiàng)都將具有相同的用法子句。用法子句提供的不同選項(xiàng)如下:
數(shù)據(jù)項(xiàng)以ASCII格式存儲(chǔ),每個(gè)字符將占用1個(gè)字節(jié)。這是默認(rèn)的用法。
以下示例計(jì)算所需的字節(jié)數(shù):
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.
數(shù)據(jù)項(xiàng)以二進(jìn)制格式存儲(chǔ)。這里,數(shù)據(jù)項(xiàng)必須是整數(shù)。
以下示例計(jì)算所需的字節(jié)數(shù):
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.
數(shù)據(jù)項(xiàng)類(lèi)似于實(shí)數(shù)或浮點(diǎn)數(shù)型,表示為單精度浮點(diǎn)數(shù)。在內(nèi)部,數(shù)據(jù)以十六進(jìn)制格式存儲(chǔ)。 COMP-1不接受PIC子句。這里1個(gè)詞是等于4個(gè)字節(jié)。
數(shù)據(jù)項(xiàng)類(lèi)似于長(zhǎng)整型或雙精度型,表示為雙精度浮點(diǎn)數(shù)。在內(nèi)部,數(shù)據(jù)以十六進(jìn)制格式存儲(chǔ)。 COMP-2不指定PIC子句。這里2個(gè)詞等于8個(gè)字節(jié)。
數(shù)據(jù)項(xiàng)以壓縮的十進(jìn)制格式存儲(chǔ)。每個(gè)數(shù)字占據(jù)半個(gè)字節(jié)(1個(gè)半字節(jié)),符號(hào)存儲(chǔ)在最右邊的半字節(jié)。
以下示例計(jì)算所需的字節(jié)數(shù):
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的Copybook是定義數(shù)據(jù)結(jié)構(gòu)的代碼選擇。如果一個(gè)特定的數(shù)據(jù)結(jié)構(gòu)應(yīng)用于許多程序中,那么我們可以使用copybook替代再次編寫(xiě)相同的數(shù)據(jù)結(jié)構(gòu)。我們使用COPY語(yǔ)句在程序中添加一個(gè)copybook。COPY語(yǔ)句用于工作存儲(chǔ)節(jié)(Working-Storage section)。
以下示例為COBOL程序中Copybook:
DATA DIVISION. WORKING-STORAGE SECTION. COPY ABC.
這里ABC是Copybooks名稱。以下在ABC copybook中的數(shù)據(jù)項(xiàng)可以在程序中使用。
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'.
更多建議: