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.