superwei

导航

<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

统计

常用链接

留言簿(4)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜

COBOL语法和文法(1)

 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.

posted on 2005-10-31 11:01 小辞猬 阅读(994) 评论(0)  编辑  收藏 所属分类: COBOL


只有注册用户登录后才能发表评论。


网站导航: