?REDEFINES
??? 可以用不同的變量描述同一內存。
??? 01 PART_RECODE USAGE DISPLAY
????? 03 PART-TYPE PICTURE...
????? 03 PART_TYPE_A.
??????? 05 PART_NUMBER PICTURE...
??????? 05 PART_COST PICTURE...
????? 03 PART_TYPE_B REDEFINES PART_TYPE_A.
??????? 05 UPC_CODE PICTURE...
????? 03 PART_TYPE_C REDEFINES PART_TYPE_A.
??????? 05 ISBN PICTURE...
??? 根據PART_TYPE決定用PART_TYPE_A還是PART_TYPE_B還是PART_TYPE_C。
??? 規則:
??????? PART_TYPE_B和PART_TYPE_C長度不能大于PART_TYPE_A。
??????? 數據項不能有VALUE。
??????? 01層不能用REDEFINES.
??????? PART_TYPE_B和PART_TYPE_C中不能有OCCURS.
PICTURE
??? 定義基本項目的具體長度,格式,數據類型。可以簡寫成PIC.
??? 格式字符串最多30個字符,可以包含下列字符:
??? A? 字母A-Z,a-z,空格
??? B? 插入空格
??? P? 標量字符,代表字段中不顯示的小數點位置
??? S? 代數符號,實際顯示取決于項目的USAGE
??? V? 小數點位置
??? X? 任何字符
??? Z? 抑制前頭的0并轉換成空字符
??? 0? 插入0
??? 9? 數字0~9
??? /? 插入/
??? ,? 插入,(逗號不能作為字符串的最后一位,最后時逗號是分隔符)
??? 。 插入。
??? *? 抑制前頭的0并轉換成*
??? +? 正值插入+,負值插入-
??? -? 正值插入空格,負值插入-
??? $? 插入美元號
??? CR 正值插入兩個空格,負值插入CR
??? DB 正值插入兩個空格,負值插入DB
例子:
??? 03 VAR PIC AAAAA.??? STATE變量長度為5個字符,不能有數字,等價于03 STATE PIC A(5)。
???輸入ASDFG ,顯示ASDFG
??? 03 VAR PIC XXXXX.?? FILLER變量長度為5個任意字符。等價于03 FILLER PIC X(5)。
???輸入123AS , 顯示123AS
??? 03 VAR PIC 99/XXX/9999 長度11,輸入05may2004,顯示05/may/2004
??? 03 VAR PIC 0ABXXX/9999 長度11,輸入05may2004,顯示05 may/2004
??? 03 VAR PIC 9(3) 長度3,0~999之間。
??? 03 VAR PIC 9(4)V99 長度6,0.00~9999.99之間。
??? 03 VAR PIC S9(5)V99 長度7,-99999.99~99999.99之間。
??? 03 VAR PIC 9(6)PPP 長度6,可以是1000,2000,...,999999000。輸入1234,顯示1000。
??? 03 VAR PIC PPP999 長度3,0.000001~0.000999之間。輸入123,顯示0.000123。
??? 03 VAR PIC ZZZ.99,輸入100.50,顯示100.50;輸入-51.50,顯示51.50;
??????????? 輸入0,顯示.00.
??? 03 VAR PIC $ZZZ.ZZ-,輸入100.50,顯示$100.50;輸入-51.50,顯示$51.50-;
??????????? 輸入0,顯示
??? 03 VAR PIC $***,***.99CR,輸入1000,顯示$**1000.00;輸入-1000,顯示$**1000.00CR;
??????????? 輸入0,顯示$***,***.00;輸入51.5,顯示$***,*51.50
??? 03 VAR PIC $$$,$$$.99,輸入100.50,顯示$100.50;輸入-100.50,顯示$100.50;
??????????? 輸入0.777,顯示$.77;輸入0,顯示$.00
??? 03 VAR PIC $.$$$,輸入1.00,顯示$.00;輸入0.65,顯示$.65;
??????????? 輸入0,顯示$.00;
??? 03 VAR PIC $--,輸入17.7,顯示$17;輸入-17.7,顯示$-17;
??????????? 輸入-5,顯示$-5
??? 03 VAR PIC $999.99+,輸入100.50,顯示$100.50+;輸入-100.50,顯示$100.50-;
??? 03 VAR PIC 9(3)B9(3),輸入55,顯示000 055;輸入1000.78,顯示001 000;
USAGE 表示基本或組數據的類型。有BINARY,COMPUTATIONAL(COMP),DISPLAY,INDEX,PACKED-DECIMAL.
JUSTIFIED
??? 03 VAR1 PIC X(5) JUSTIFIED RIGHT.
??? 03 VAR2 PIC X(5).
??? 輸入XYZ,VAR1顯示的是"? XYZ",VAR2顯示的是"XYZ? "。
BLANK WHEN ZERO
??? 03 VAR PIC $999,999.99 BLANK WHEN ZERO .
??? 當字段值為0,這個項目設置為全部空格。
VALUE
??? 定義的時候就賦值。
??? 03 VAR PIC X(5) VALUE "ABCDE".
??? 01 VAR VALUE ALL SPACES.
????? 03 VAR1 PIC XXX.
????? 03 VAR2 PIC XX.
算術語句
??? COBOL中操作符執行順序為:取正(+)、取負(-)最高級,指數操作(**)其次,乘(*)、除(/)再其次,加(+)、減(-)最后。
ROUNDED?? 舍入操作。
??? 77 A PIC 9V9 VALUE 9.1.
??? 77 B PIC 9.
????? ADD 0.5 TO A GIVING B ON SIZE ERROR GO TO PROC1.
????? ADD 0.5 TO A GIVING B ROUNDED ON SIZE ERROR GO TO PROC2.
????? END-ADD.
ON SIZE ERROR 是當語句出現錯誤時執行的。本例中第一句話執行沒有錯誤,所以ON SIZE ERROR
不執行PROC1.第二句話,當0.5加上9.1得到9.6,因為有ROUNDED,所以執行舍入操作,得到10。而B只有1位數字,所以發生錯誤,執行ON SIZE ERROR操作,跳轉執行PROC2。?
CORRESPONDING(CORR)??? 數據項同名時編寫多條語句。ADD和SUBSTRACT有此選項。
??? 01 A .
????? 03 B.
??????? 05 B1 PIC 999V99.
??????? 05 B1 PIC 999V99.
??????? 05 B1 PIC 999V99.
????? 03 C.
??????? 05 B1 PIC 999V99.
??????? 05 B1 PIC 999V99.
??????? 05 B1 PIC 999V99.
則語句ADD CORR B TO C.相當于執行了下面3條語句。
??? ADD B1 OF B TO B1 OF C.
??? ADD B2 OF B TO B2 OF C.
??? ADD B3 OF B TO B3 OF C.
組項目不一定要格式相同。一個組項目中的內容在另一個組項目中可以沒有,數據項順序也無關緊要。只是嚴格按照數據項名稱對應。
??? ADD A,B GIVING C. END-ADD.????????????? 將A,B相加放入C。
??? SUBTRACT A,B FROM C。END-SUBTRACT.????? 從C中減去A,B.
??? MULTIPLY A BY B GIVING C. END-MULTIPLY. 將A,B相乘放入C。
??? DIVIDE A INTO B GIVING C. END-DIVIDE.?? 將B除于A的結果放入C.
??? DIVIDE A BY B GIVING C. END-DIVIDE.???? 將A除于B的結果放入C.
??? DIVIDE A BY B GIVING C REMAINDER D.???? 將A除于B的商放入C,余數放入D.
??? D=A-B*C.
??? 77 C PIC S99V9.
??? 77 D PIC S99V9.
??? DIVIDE 3 INTO 7 GIVING C REMAINDER D.
??? C的值為2.3,D為0.1。(D=7-3*2.3)
COMPUTE
??? 除了取余操作要用DIVIDE外,其他操作都可以用此語句。本語句求值一個算術表達式,并將結果存放在一個或幾個變量中。
COMPUTE? A ROUNDED,B? = X*Y/(N+M)+Z. 將X*Y/(N+M)+Z的結果存放在B中,然后舍入后放入A中。
MOVE
??? MOVE A TO B.
??? 也可以用CORR選項。
??? MOVE CORR A TO B.