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