Chinaunix首页 | 论坛 | 博客
  • 博客访问: 67443
  • 博文数量: 15
  • 博客积分: 575
  • 博客等级: 中士
  • 技术积分: 160
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-25 14:49
文章分类

全部博文(15)

文章存档

2011年(1)

2006年(14)

我的朋友

分类:

2006-05-25 15:23:21

COBOL语言概述

 

一.COBOL程序的结构

  1.部

IDENTIFICATION DIVISION     标识部

ENVIRONMENT DIVISION      环境部

DATA DIVISION                数据部

PROCEDURE DIVISION         过程部

  2.节(SECTION)和段(PARAGRAPH

    1)部--

2)标识部下面不设节,直接设段

3)过程部可以设节,下面再设段,也可以直接设段

  3.句子、语句和子句

     每一段由若干句子(Sentence)组成,一个句子以句号加上一个以上的空格来结束。

     句子由语句(Statement)组成。

     语句中又可以包含若干子句(clause),每一个子句也有一个动词(但这个动词往往是可以省略的),它指定某一方面的特定功能。

 

二.COBOL源程序的书写格式

  11-6列:标号区

  2.第7列:续行标志区(“-”为续行,“*”为注解)

  38-11列:A区(部头,节头,段头,层号0177,文件描述符FD等)

  412-72列:B区(正文)

  573-80列:注释区

 

三.COBOL字符

     数字0-9,大写字母A-Z,小写字母a-z,

专用字符15个{ + - * / = , . ; ‘ ( ) < > $ 空格 }

 

四.常量

  1.数值常量

    (1)小数点不能多于一个,而且不能出现在常数最右边。

    (2)数值常量的长度不能超过18位数字。

    (3)至少要有一个数字,不能有多于一个符号。

    (4)数字间不能有空格,空格是分界符。

  2.非数值常量

    (1)用’’把字符串包起来

    (2)假如要把’’放到非数值常量中,用QUOTE保留字,

MOVE QUOTE ‘CHINA’QUOTE TO A

    (3)长度不应超过120个字符。

  3.表意常量

表意常量

所表示的值

ZERO/ZEROS/ZEROES

表示一个或多个零字符

SPACE/SPACES

表示一个或多个空格字符

HIGH-VALUE/HIGH-VALUES

表示一个或多个具有“最高值”的字符(每个字符的二进制表示为11111111)

LOW-VALUE/LOW-VALUES

表示一个或多个具有“最小值”的字符(每个字符的二进制表示为00000000)

QUOTE/QUOTES

表示一个或多个引号字符

ALL  常量

表示由一个或多个该常量组成的字符串

   

五.COBOL的数据关系

文件

记录1

记录i

记录n

组合项1

组合项i

组合项n

初等项

组合项p

组合项q

初等项

 

初等项

 

初等项

 

初等项

 

 

过程部初步

 

一.输入输出语句

  1.ACCEPT(接收语句):直接从中断键盘或系统指定的输入设备上输入少量的数据。

     语法:ACCEPT  标识符  [FROM 助忆名]

  2.READ(读语句):从外部文件上读入数据输到程序中的数据项中。

     语法:READ  文件名  RECORD [INTO 标识符][;AT END 执行语句]

  3.WRITE(写语句):将内存区中的数据输出到外部设备

     语法:

WRITE  记录名  [FROM 标识符1][BEFORE ADVANCING 标识符2/整数 LINE/LINES]

                                   AFTER             助忆名/PAEG

  4.OPEN(打开语句):程序若要读和写文件,先要把文件打开

     语法:OPEN  INPUT/OUPUT  文件名1[,文件名2……]

  5.CLOSE(关闭语句):关闭文件。

     语法:CLOSE  文件名1[,文件名2……]

 

二.算术运算语句

  1.ADD(加法语句)

     举例:ADD A TO B               A+BàB

               ADD 15 TO C              15+CàC

               ADD A,B TO C            A+B+CàC

               ADD 15,25 TO C          15+25+CàC

               ADD A,B GIVING C        A+B--C

               ADD 15,25 GIVING T      15+25àT

               ADD A,B TO C,D         A+B+CàC,A+B+DàD

  2.SUBTRACT(减法语句)

     举例:SUBTRACT B FROM A                     A-BàA

               SUBTRACT B,C FROM A                  A-B-CàA

               SUBTRACT B,C FROM A,T               A-B-CàA,T-B-CàT

               SUBTRACT B,C FROM A GIVING X         A-B-CàX

  3.MULTIPLY(乘法语句)

     举例:MULTIPLY A BY B                       A*BàB

               MULTIPLY 0.5 BY B                     0.5*BàB

               MULTIPLY A BY B GIVING C              A*BàC

               MULTIPLY 1.5 BY 3 GIVING C,A          1.5*3àC,1.5*3àA

               MULTIPLY A BY B,C                     A*BàB,A*CàC

  4.DIVIDE(除法语句)

     举例:DIVIDE A INTO B                       B/AàB

               DIVIDE A INTO B GIVING C              B/AàC

               DIVIDE A BY B GIVING C                A/BàC

  5.COMPUTE(计算语句)

     语法:COMPUTE 标识符1[,标识符2]……=算术表达式

     举例:COMPUTE T = (A + B) * C / D

     注意:(1)所以运算符两侧应留一空格

          (2)括号外侧应留空格,内侧可不要留空格

 

三.MOVE(传送语句)

     语法:MOVE 标识符1/常量1 TO 标识符2[,标识符3]……

 

四.GOTO(转移语句)

     语法:(1)GO TO 过程名

          (2)GO TO 过程名1[,过程名2]……过程名n,DEPENDING ON 标识符

 

五.IF(条件语句)

  1.关系运算符

COBOL关系运算符

意义

IS GREATER THAN

IS > THAN

大于

IS LESS THAN

IS <    THAN

小于

IS EQUAL TO

IS =     TO

等于

NOT GREATER THAN

NOT >

不大于

NOT LESS THAN

NOT <

不小于

NOT EQUAL TO

NOT =

不等于

  2.IF语句的两种形式

    (1)IF 条件 语句组

    (2)IF 条件 语句组1 ELSE 语句组2

  3.IF语句的一般格式

     IF 语句组1/NEXT SENTENCE  [ELSE 语句组2/NEXT SENTENCE]

六.STOP(停止语句)

    语法:STOP RUN/常量

 

 

标识部和环境部

 

一.标识部

  1.必写部分

     IDENTIFICATION DIVISION

     PROGRAM-ID.  程序名.

  2.任选部分

     [AUTHOR                   作者姓名.]

     [INSTALLATION.             计算机设置的场所.]

     [DATE-WRITTEN.             源程序编写的日期.]

     [DATE-COMPILED.            源程序编译的日期.]

     [SECURITY.                 保密程度.]

 

二.环境部

  1.环境部的一般形式

     ENVIRONMENT DIVISION.                                 (环境部)

     CONFIGURATION SECTION.                                (配置节)

     SOURCE-COMPUTER.       源计算机名

     OBJECT-COMPUTER.       目标计算机名

     [SPECIAL-NAMES.  专用名描述项]

     [INPUT-OUTPUT SECTION.                                (输入输出节)

     FILE-CONTROL.   {文件描述体}……

     [I-O-CONTROL.   输入输出控制描述体]]

  2.配置节(CONFIGURATION SECTION)

    (1)源计算机段和目标计算机段的一般格式

         SOURCE-COMPUTER.

         OBJECT-COMPUTER.

         [MEMORY SIZE IS 整数{WORDS/CHARACTERS/MODULES}]

    (2)专用名段

         格式:SPECIAL-NAMES.

                  [DECIMAL-POINT IS COMMA.]

                  [CURRENCY SIGN IS 非数值常量.]

                  [专用名 IS 助记名.]

  3.输入输出节(分为输入输出控制段与文件控制段)

    文件控制段

    格式:INPUT-OUTPUT SECTION.      (输入输出节)

               FILE-CONTROL.              (文件控制段)

               SELECT 文件名 ASSIGN TO 外部文件名.

    说明:SELECT的三种用法

(1)       SELECT子句的“ASSIGN TO”的后面写上磁盘上实际的文件名。

(2)       SELECT子句中只指出外部设备名。

(3)       在一些中、大型计算机系统,在SELECT子句中用该系统指定的逻辑名作为外部文件名,然后用作业控制语句将该逻辑名与实际的设备和文件相联系。

 

 

数据部(一)

 

一.概述

  1.数据有两种:孤立的数据项,组合的数据项

  2.数据的层次与层号

    (1)数据的层次结构:记录à组合项à初等项

    (2)层次的规定如下:

         用来描述数据层次结构的层号从01开始,到49。记录的最高层次定为01号。

         层号小的组合项包含层号大的数据项(组合项或初等项)。

         一个层号为K的组合项包括它下面所有层号比它大的组合项和初等项,直到遇到层号小于K或等于K的层次为止。

  3.数据部的结构

    (1)文件节(FILE SECTION)

用来描述程序中用到的输入文件和输出文件及其记录中各数据项的属性。

    (2)工作单元节(WORKING-STORAGE SECTION)

用来描述程序中用到的数据项。

3)联接节(LINKAGE SECTION

         用来描述与调用程序间发生数据传递的数据项。

4)报表节(REPORT SECTION

         为了完成报表编制功能,此节用来规定欲输出的报表的“体裁“,设计各报表栏的打印形式和方法等。

 

二.文件节

  1.文件描述

     格式:FD 文件名 LABEL {RECORD IS/RECORDS ARE} {STANDARD/OMITTED} [DATA {RECORD IS/RECORDS ARE} 数据名]

  2.记录描述

     记录描述体由01层号开头,后跟记录名。

     如果记录下面不再分项,即记录本身就是一个初等项,则这种描述体最简单。

三.字型子句(PIC子句)

  1.数值型数据的描述

    (1)“9”描述符:表示在该位置上可以放入一个0-9之间的数字

        举例:02 X PIC 9999.

              02 Y PIC 9(5).

    (2)“V”描述符:支持在数值型数据结构中隐含的小数点位置

        举例:03 M PIC 999V999.

    (3)“P”描述符:对低位上有若干个零的数,可以用该描述符。

        举例:01 A PIC 9P(9).     表示10的9次方

              01 B PIC PPPP99.    表示0.000023

    (4)“S”描述符:如果想在数据项中放入一个带符号的数,可以用该描述符。对于类似PIC S99的数据项,系统在内存中该数据项的最后一个字节中,放入一个标记,表示此数为负。

 

二.字母型数据的描述

    “A”描述符:这种类型的数据项中只能放字母或空格

 

三.字符型数据的描述

   (1)字符型数据的规定

        概念:由任意的COBOL字符组成的数据,称字符型数据。

        说明:I.字符型数据可以用X描述符来描述,也可以用9和A描述符来描述。

              II.字母型数据可以用A来描述,也可以用X。

              III.字符型数据中可以放数字。

 

四.编辑型描述符

  1.插入小数点“.”,用“.”描述符。

  2.插入逗号“,”作分位号,用“,”描述符。

  3.插入零,用“0”描述符。

  4.插入空格,用“B”描述符。

  5.插入正负号,用“+”或“-”描述符。

  6.插入“$”

    (1)加到数字前。

    (2)在数字前加正负号和$。

  7.浮动插入正负号和“$”

  8.取消高位零,用“Z”和“*”描述符。

  9.插入“DB“和“CR”字符:此两个描述符只能用作固定插入,而且只作最后一个描述符号。当数值为正时,此两次留两个空格;为负时,在编辑型数据项中最后两个字节中置DB或CR。

五.PIC子句小结

  1.格式:PICTURE/PIC IS 描述字符串

  2.每一种类型数据可以使用的描述字符如下:

数据类型

PIC子句中允许使用的描述字符

数值数据项

9 V S P

字母数据项

A

字符数据项

9 A X

编辑数值数据项

9 P V . , B Z + - $ * 0 CR DB

编辑字符数据项

A X 9 B 0

 

3.描述字符的含义

描述字符

含义

9

表示一个数字的位置

A

表示一个字母的位置

X

表示一个字符的位置

V

表示隐含小数点的位置

S

表示数值数据带符号

P

表示十进制比例换算,即指明落在数据域外的十进制小数点位置

$

插入货币号位置

.

插入小数点位置

,

插入逗号的位置

+

一律加符号

-

对负数加负号,对正数前留一空格

Z

取消高位零,以代空格

*

取消高位零,代以*

B

插入空格的位置

0

插入零的位置

DB(借方)

数据为负时,在数据后面出现DB,数据为正时,数据后空两格

CR(贷方)

数据为负时,在数据后面出现CR,数据为正时,数据后空两格

 

四.工作单元节(WORKING-STORAGE SECTION)

  1.工作单元节的作用

     程序中用的数据项分两部分:一部分是属于输入或输出文件的,另一部分是非输入或

输出的数据。

     在工作单元节中描述的数据项也有两种形式:一种是孤立的数据项,它们是初等项。

一种是组合项。COBOL规定,孤立的数据项的描述体以层号77开头,组合项描述体以01到

49之间的一个数作层号。在次序上常先写77层,再写01-49层。

  2.赋初值子句(VALUE子句)

     举例:77 A PIC 99 VALUE IS 0.

           77 T PIC X(9) VALUE ‘fogshadow’.

     说明:只有对工作单元节中的数据项可以赋初值。

 

 

过程部之二

 

一.传送语句(MOVE语句)的较高技巧

1.各种类型数据间的传送

1)同类型数据间的传送

2)编辑传送。

   注意:传送的方向必须是由数值型数据传送给编辑型数据,而不能由编辑型数据传送

给数值型数据。

3)不同类型数据间的传送规则。

   说明:Y为允许传送,N为不允许,Z为在某些情况下是正确的

-接收项

-发送项

数值型

数值编辑型

字母型

字符型

字符编辑型

组合项

整数

非整数

数值型

整数

Y

Y

Y

Y

Y

Y

Y

非整数

Y

Y

Y

N

N

N

Y

数值编辑型

N

N

N

N

Y

Y

Y

字母型

N

N

N

Y

Y

Y

Y

字符型

Z

Z

Z

Z

Y

Y

Y

编辑字符型

N

N

N

N

Y

Y

Y

数值常量

Y

Y

Y

N

N

N

Y

非数值常量

N

N

N

Y

Y

Y

Y

ZERO

Y

Y

Y

N

Y

Y

Y

SPACE

N

N

N

Y

Y

Y

Y

组合项

Z

Z

Z

Z

Y

Y

Y

 

  2.组合项的传送

    (1)发送项和接收项都是组合项,而且其结构和描述均相同,则可看作将各初等项一一对应传送。

    (2)如发送项与接收项长度相同,但数据结构形式不同,则将发送项的内容原样不变地自左而右顺序地传送到接收项。

  3.对应传送(带CORRESPONDING子句的MOVE语句)

    (1)数据名的受限与受限名的传送

         数据名和限定符之间用OF或IN 来连接。

         举例:MOV A1 OF A OF SUM TO T1.

    (2)用CORRESPONDING子句的传送——对应传送(同名传送)

         作用:把一个组合项中若干项传送给另一组合项中同名的项。

         格式:MOVE CORRESPONDING/CORR 标识符1 TO 标识符2

 

二.算术运算语句的较高技巧

  1.四舍五入处理(ROUNDED子句)

     作用:按照数据项的描述要求对多余位截断,然后对被截断的后一位数进行四舍五入处理。

     举例:ADD A,B TO C ROUNDED

A+B+C值

C描述

有无ROUNDED

C内容

186.7851

999

187

186.7851

999V9

186.8

186.7851

999V99

186.79

186.7851

999V999

186.785

如果计算结果有多个,则应该分别说明哪一个接收项要进行舍入处理,ROUNDED应写在有关的接收项(结果数据项)的数据名后面,如

ADD A,B,C TO D,E,F ROUNDED,G ROUNDED,H

  2.长度溢出处理

     当计算结果的整数部分的长度如果比结果数据项描述所规定的整数部分长,则发生长度溢出,结果的高位部分被截断。

     ON SIZE ERROR子句提供“溢出”处理。即当发生溢出错误的时候,按程序设计者事先指定的操作处理。

     举例:MULTIPLY A BY B GIVING C

ON SIZE ERROR DISPLAY‘SIZE ERROR‘

              STOP RUN.

  3.对应项间的运算(带CORRESPONDING子句的算术运算语句)

     格式:ADD CORRESPONDING/CORR 标识符1 TO 标识符2 [ROUNDED]

                       [;ON SIZE ERROR 强制语句]

SUBTRACT CORRESPONDING/CORR 标识符1 TO 标识符2 [ROUNDED]

                       [;ON SIZE ERROR 强制语句]

  4.除法语句中的余数子句(REMAINDER子句)

     举例:DIVIDE 1.5 INTO 7 GIVING C REMAINDER D.

 

三.IF语句的高级技巧

  1.IF语句的嵌套

     举例:(注意IF与ELSE的一一配对)

     IF A=B

        MOVE B TO T

          IF A=C

             MOVE C TO R

               IF X

                  SUBTRACT X FROM Y

                    IF N=M

                       IF P=Q

                          DISPLAY P,Q

                       ELSE NEXT SENTENCE

                    ELSE NEXT SENTENCE

                ELSE NEXT SENTENCE

            ELSE NEXT SENTENCE

      ELSE NEXT SENTENCE

  2.关系表达式条件

     以下为关系条件的比较方式,其中,Y表示作为数值型比较,N表示作为非数值型(即字符型比较),Z表示不能比较。

-客体

-主体

数值型

数值常量

非数值常量

字母型

字符型

组合项

数值型

Y

Y

N

N

N

N

数值常量

Y

Z

Z

N

N

N

非数值常量

N

Z

Z

N

 

N

字母型

N

N

N

N

N

N

字符型

N

N

N

N

N

N

组合项

N

N

N

N

N

N

 

  3.符号条件

     格式:数据名/数值表达式 IS [NOT] POSITIVE/NEGATIVE/ZERO

     举例:(1)IF X IS POSITIVE    IF X>0  等价

          (2)IF X IS NEGATIVE    IF X<0  等价

          (3)IF X IS ZERO        IF X=0  等价

  4.类型条件

     格式:标识符  IS [NOT] NUMERIC/ALPHABETIC

     其中,NUMERIC表示数值类型,ALPHABETIC表示字母类型。

  5.条件名条件

     作用:用来代替一系列繁杂的IF-ELSE语句。

     格式:88 条件名 VALUE IS/ARE 常量1[THROUGH/THRU 常量2]

                 [常量3[[THROUGH/THRU 常量4]]……

     举例:首先在数据部说明

           77 X  (条件变量) PIC 9(6).

           88 X1 VALUE 0      THRU 99.

           88 X2 VALUE 100    THRU 999.

           88 X3 VALUE 1000   THRU 4999.

           88 X4 VALUE 5000   THRU 100000.

           经过上面的说明后,可以在过程部中直接使用条件名条件。

           IF X1 MOVE 0.03 TO R.   (0<=X<100时,R=0.03)

           IF X2 MOVE 0.04 TO R.   (100<=X<1000时,R=0.04)

           IF X3 MOVE 0.05 TO R.   (1000<=X<5000时,R=0.05)

           IF X4 MOVE 0.06 TO R.   (5000<=X<=100000时,R=0.06)

  6.复合条件

     逻辑运算符有:ANDORNOT

     运算次序是:NOTàANDàOR

 

五.字符串连接语句(STRING语句)

六.字符串分解语句(UNSTRING语句)

七.检测语句(INSPECT语句)

八.转换语句(TRANSFORM语句)

 

 

过程部之三

—执行语句(PERFORM语句)

 

一.执行语句的作用

    类似于子程序

 

二.执行语句的最基本形式

    格式:PERFORM 过程名1[THROUGH/THRU 过程名2]

 

三.执行语句的使用规则

  1PERFORM语句的嵌套

  2.在PERFORM语句所执行的语句序列中,可以含有转移语句,可以使流程转到语句序列之外,但一般应该转回到此语句序列,以便能最后能执行此语句序列的最后一个句子。

 

四.使用PERFORM语句实现循环

    格式:PERFORM 过程名1[THROUGH/THRU 过程名2] 整数/标识符 TIMES

    说明:1.标识符应为整数数据项

          2.如果此标识符的值在执行语句序列中有变化,不会影响执行次数。即以它开始时候的值来决定执行的次数。

 

五.执行语句的较复杂的形式

  1.格式:PERFORM 过程名1[THROUGH /THRU 过程名2 ] UNTIL 条件

     作用:反复执行指定的语句序列,直到给定的条件满足为止。

  2.格式:

PERFORM 过程1[THROUGH/THRU 过程名2]

     VARYING  标识符1  FROM  常数1/标识符2  BY 常数2/标识符3  UNTIL 条件

     举例:PERFORM  T1  THRU  T2  VARYING  X  FROM A

           BY  B  UNTIL  X>5

           其作用是执行T1T2语句序列,X是“循环变量”,是整型数据项。A为初值,B为步长,它们都是整数或整数数据项。

 

六.执行语句的多重循环形式

  格式:PERFORM 过程名1  [THROUGH/THRU]  过程名2

        [VARYING 参数1  FROM  初值1  BY  步长1  UNTIL  条件1]

        [AFTER   参数2   FROM  初值2  BY  步长2  UNTIL  条件2]

        [AFTER   参数3   FROM  初值3  BY  步长3  UNTIL  条件3]

  说明:1。最后面的循环体先执行。

        2COBOL允许用到三重循环。

 

七.出口语句(EXIT语句)

    作用:提供一个段名,被PERFORM调用的语句序列由此公共汇集点,返回到PERFORM的下一个语句去。

    举例:PERFORM  A  THRU  B

          ……

       A. IF  X>Y  GO  TO  B

          MOVE X TO T.

B.        EXIT.

八.修改语句(ALTER语句)

    格式:ALTER  过程名1  TO  [PROCEED  TO]  过程名2

          [,过程名3  TO  [PROCEED  TO] 过程名4]……

     作用:用来改变GO TO的转向点。该语句使以过程名1,过程名3,……命名的各段中的GO  TO语句的转向点分别被修改为过程名2,过程名4……。注意,过程名1,过程名3……各段只能由一条GO TO语句单独组成。

 

 

数据部之二

-数据部的较高技巧

 

一.数据在计算机内的表示形式

  1.字符数据在内存中的存储形式

    1ACSII

    2EBCDIC

  2.数值型数据在内存中的存储形式

    1)外部十进制(或称扩张十进制)形式

    2)外部浮点数形式

    3)内部十进制(又称缩合十进制)形式

    4)定点二进制形式

    5)内部浮点形式

 

二.用法子句(USAGE子句)

    作用:可以使程序设计者自由选择数据在内存中的存放形式。

    格式:[USAGE  IS] DISPLAY/COMPUTATIONAL/COMP

    说明:1DISPLAY表示是“显示型的用法”,表示此数据项适于显示,打印。

          2COMPUTATIONAL=COMP,表示是“计算型的用法”,适于计算。

          3.如省略USAGE子句,则隐含表示为用DISPLAY形式。

 

三.符号子句(SIGN子句)

    作用:用来指定数值型数据描述体中运算符号的状态和位置。

    格式:[SIGN IS]  LEADING/TRAILING  [SEPARATE CHARACTER]

    说明:1。没有SIGN子句时,数值的符号是存放在数据项最后一个字节中的。

          2.用SIGN子句可以指定符号在数值的前部还是后部(LEADING/TRAILING)。

          3.指定符号单独占一个字节,用“SEPARATE”可选项,内存中增加一个字节。

          4SIGN子句只能用于PIC字符串中含有“S”的数值型数据描述体中。

          5.使用SIGN子句的数据项的用法应该是USAGE DISPLAY(显式的或隐含的)。

    举例:02  A  PIC  S9(3)  USAGE  DISPLAY  SIGN  IS  LEADING.

 

四.重定义子句(REDEFINES子句)

    作用:不同的数据项可以共用内存中的同一段空间。例如已给数据项A分配了一段内存空间,在经过某一段的过程后,A已经不再使用了,但它仍占着内存这部分空间,为了节约内存,可以将另一数据项B也分配在A所占的这段内存空间。

格式:层号  数据名1  REDEFINES  数据名2

举例:02  A  PIC  X(5).

      02  B  REDEFINES  A  PIC  9(5).

    说明:1。数据名2 与数据名1的层号必须相同。

          2.用REDEFINES子句的描述体应该紧跟在被重新定义的数据项的描述之后,中间不能插入其它项的描述说明。

          3.可以多次重定义,但必须紧跟出现,而且要求使用最初定义的数据名。

          4REDEFINES子句不能用于文件节的01层中。

          5.用REDEFINES子句可以改变数据结构,但数据名12的长度应该相等。

          6REDEFINES子句应在其它子句之前。

          7.重定义子句所在的数据描述体中不能使用初值子句赋初值。.

 

五.重命名子句(RENAMES子句)

    作用:在不改变数据项的长度的前提下,重新定义数据区的名称和数据结构的形式(包括初等项的类型和长度)。可以把原来已经定义的某些数据项重新组合成一个新项,并以一个新名字来代表它。但用重命名子句不能改变原来各初等项的类型、长度等属性。

    格式:66  数据名1  RENAMES  数据名2  [THRU  数据名3]

    说明:只能用于工作单元节中,不能用于文件节中

 

六.遇零置空子句(BLANK子句)

    作用:当数据项的值为零时,使它的内容改变为空白(空格)。这个子句只能用于数值型或编辑型的初等项。

    举例:03  A  PIC  9999  BLANK  WHEN  ZERO.

 

七.对齐子句(JUSTIFIED子句)

    作用:字符或字母型数据传送的时候是按标准的对齐方式,即“左对齐”,若想改为“右对齐”,可以用JUSTIFIED子句。

    格式:JUSTIFIED/JUST  RIGHT

    举例:77  B  PIC  X5  JUSTIFIED  RIGHT

 

八.同步安置子句(SYNCHRONIZED子句)

    作用:一个机器字一般定为4个字节,从内存中取数据的时候是以机器字为单位的,而数据存放则是按字节连续存放的,这里面就存在一个边界对齐的矛盾,会影响目标程序运行时间。用同步安置子句可以指定数据项在内存中如何按自然边界来安置。

    格式:SYNCHRONIZED/SYNC  LEFT/RIGHT

    说明:1。用SYNC  LEFT时,左对齐,右边补零或空格。

          2.用SYNC  RIGHT时,右对齐,左边补零或空格。

    举例:01  A.

02       A1  PIC  9(3)  SYNC  LEFT  VALUE  82.

03       A2  PIC  X(3)  SYNC  RIGHT  VALUE ‘ABC’

 

九.复写语句(COPY语句)

    作用:把“源程序库”中的某些记录描述和数据描述插入到自己的源程序中。

    格式:COPY  库名  [REPLACING  标识符1/常量1/字1  BY  标识符2/常量2/字2]

 

子程序

 

一.概述

    举例:编一个打印一行“*”符号的子程序

1.  主程序(只写与调用子程序有关的部分)

IDENTIFICATION  DIVISION.           (标识部)

PROGRAM-ID.  A.                     (程序名为A)

ENVIRONMENT  DIVISION.              (环境部)

……

DATA  DIVISION.                     (数据部)

……

PROCEDURE  DIVISION.                (过程部)

……

CALL  B.                            (调用子程序B)

……

2.  子程序

IDENTIFICATION  DIVISION.

PROGRAM-ID.  B.

ENVIRONMENT  DIVISION.

DATA  DIVISION.

WORKING-STORAGE  SECTION.

77       X PIC  X(80).

PROCEDURE  DIVISION.

MOVE  ALL’*’  TO  X.

DISPLAY  X.

EXIT  PROGRAM.

       可以看到程序A和程序B分别是两个程序,各有自己的程序名,都有四大部分。

 

二.调用程序与被调用程序间的数据联系

    格式:调用语句

          CALL  子程序名  USING  数据名1  [,数据名2]……]

          被调用程序中过程部部头的一般格式为

          PROCEDURE  DIVISION  [USING  数据名1[,数据名2]……]

    说明:1。两部分相对应的参数个数、长度必须相等。

          2.参数是在内存中建立关联,类似于C++中的传递引用参数。

 

三.子程序的结构

  1.标识部

     说明子程序的名字,以供调用。

  2.环境部

  3.数据部

    (1)文件节(FILE  SECTION)

    (2)工作单元节(WORKING-STORAGE  SECTION)

    (3)联接节(LINKAGE  SECTION):如果子程序过程部部头的USING子句中有数据名,则此数据名应在此节中加以说明。

  4.过程部

     过程部的部头:PROCEDURE  DIVISION  USING  数据名1,数据名2,……

     过程部中应该包括一个程序出口语句:EXIT  PROGRAM.

 

 

表的建立与查找

 

一.表的概念

COBOL语言中的表(TABLE)类似于其他高级语言中的数组(ARRAY)。

表中,序号称为下标,相对地址称为位标,下标和位标称为“出现号”。

 

二.表的建立(OCCURS子句)

    格式:OCCURS  整数  TIMES

    举例:01  PRODUCT-RECORD.

03     RODUCT  OCCURS  20  TIMES.

04 QUANTITY-OF-PRODUCTION  PIC  9(6).

04 QANTITY-OF-SALES  PIC  9(6).

04 QANTITY-OF-HAND  PIC  9(6).

    说明:1。OCCURS子句不能出现在77层,因为77层是独立的数据项。

          2.OCCURS子句不能用于01层。

          3.只有当OCCURS所说明的数据是初等项时,才能在该数据项的描述中使用PIC子句。

          4.不能用VALUE子句对表赋初值,不能同时用OCCURS子句和VALUE子句来描述同一数据项。

 

三.可变长表

    格式:OCCURS  整数1  TO  整数2  TIMES  DEPENDING  ON  数据名1

    说明:根据数据名1的值来确定数据项重复的次数。

 

四.表元素的引用

    格式:表名(下标)

    说明:1。如果B是一个表,不直接引用表名B而不加下标。

          2.如果表元素是组合项,则引用它下属的项(可以是初等项或组合项),也必须用下标指明它是属于哪一个表元素的。

          3.如果表元素是组合项,可以用它对下属的数据项进行限定。

          4.下标只能是整常数或具有整型值的数据名。

          5.下标不能是带下标的数据名,即不能是表元素。

 

五.给表元素赋初值

  1.对包括所有表元素的整个表赋给一个初值,这时可以对表的描述体上面一层的数据项赋一个初值即可。

     例1:01  TABLE  VALUE  IS  ZERO.

03     OCCURS  20  PIC  9(3).

     例2:01  T  VALUE’ABCDEFHIJ’.

02       Q  OCCURS  3  PIC  X(3).

          这样,Q(1),Q(2),Q(3)的内容分别是ABC,DEF,HIJ。

  2.联合使用OCCURS子句和REDEFINES子句来给各个表元素赋值。

     步骤:(1)先在工作单元节中定义一个组合项,它占的内存的大小和需赋值的表一样,在该组合项中定义若干个数据项,数据项的描述和表的元素相同。

          (2)然后对这些数据项分别用VALUE子句赋以初值,由于在这些数据项的描述中没有出现OCCURS子句,因此用VALUE赋初值是合法的(VALUE子句和OCCURS子句不能同时用来描述一个数据项)。这些值就是要赋给表元素的初值。

          (3)把这个组合项重定义为一个表。

 

六.用位标法引用表元素

  1.位标的概念:位标的值表示表元素在该表中的相对位置(以字节数表示)。

  2.位标名的指定方法:在数据部中定义一个表时所用的OCCURS子句中要加上“INDEXED BY 位标名”短语来指定。

     说明:(1)由于位标是专门用于引用表元素的特殊数据项,它不能用来进行算术运算。

          (2)一维表或多维表的每一维按需要可以指定若干个位标名,引用时这些位标名只能在该维内使用。

          (3)有时需要把位标的值转存到另一个数据项中,但由于位标是特殊类型的数据项,因此,需要另外定义一种特殊的数据项叫位标数据项,用来专门存储位标的值。位标数据项在数据部中定义。描述位标数据项用USAGE子句。例如:77 K USAGE IS INDEX.

 

七.SET(设置)语句

    1.作用:将一表元素的相对地址放到指定的位标去。

          如: SET  I  TO 10.

          表示将位标I置位到第10个元素的第一个字节的相对地址上去。

2.格式一

       SET  标识符1[,标识符2]……  TO  标识符3/位标3/整数

            位标1[,位标2]……

       规则列表(设SET  A  TO  B)

-发送项B

-接收项A

整数

数值初等项

位标名

位标数据项

数值初等项

不合法

不合法

将位标代表的序号传送

不合法

位标名

将整数(序号)化成相对地址传送

同左

1)如果两个位标名指向同一个表,则转换成另一表的相对地址再传送,即将发送项代表的表元素顺序号减1,乘以接收项相关表元素的长度,再传送

简单传送

位标数据项

不合法

不合法

简单传送

简单传送

 

3.  格式二

SET  位标1 [,位标2]……  UP/DOWN  BY  标识符/整数

作用:给位标增减一个量。

 

八.表的检索

  1.用于顺序检索的SEARCH语句

     格式:SEARCH  表名[VARYING  位标名1/标识符2][AT  END  强制语句1]

              WHEN  条件1  强制语句2/NEXT SENTENCE

             [WHEN  条件2  强制语句3/NEXT SENTENCE]……

     举例:SET  N  TO  1.

           SEARCH  WORKER-TABLE

                 AT  END  DISPLAY‘CANNOT  FIND  NAME’

               WHEN  NAME(N)=‘ZHANG  SHENG’

                    DISPLAY  NAME(N),PAY(N).

            ……

      SEARCH语句是这样执行的:从指定的表元素开始,检查是否满足WHEN后面指定的条件。如不满足,就使N增值,自动执行一个SET  N  UP  BY  1。使N指向下一个元素的地址,如果查到某一个元素满足指定的条件时,查表工作立即停止,执行WHEN字句中条件后面的语句。

  2.用于有序表的SEARCH语句(折半法检索)

    (1)说明升(降)序的一般格式为:

         ASCENDING/DESCENDING  KEY  IS  数据名1[,数据名2]……

                ASCENDING/DESCENDING  KEY  IS  数据名3[,数据名4……]……

         举例:02  BOOK-TABLE  OCCURS  100

                  ASCENDING  KEY  IS  NAME

                  DESCENDING KEY  IS  COD

                  INDEX  BY  N.

    (2)SEARCH语句的一般格式(之二)

         SEARCH  ALL  表名[;AT END  强制语句1]

                 WHEN  条件  强制语句2/NEXT SENTENCE

         举例:SEARCH  ALL  BOOK-TABLE

                     AT  END  DISPLAY’CANNOT  FIND  NAME’

                     WHEN  NAME(N) = ‘COMPUTER  DESIGN’

DISPLAY  NAME (N),NUM (N).

九.用PERFORM语句对表进行检索

    最多可以处理三重循环

    格式:

PERFORM  过程名1[THRU 过程名2]

    VARYING  位标名1/下标名1  FROM  位标名2/常量1/标识符1  BY 常量2/标识符2  UNTIL  条件1

    AFTER  位标名3/下标名2  FROM  位标名4/常量3/标识符3  BY 常量4/标识符4  UNTIL  条件2

    AFTER  位标名5/下标名4  FROM  位标名6/常量5/标识符5  BY 常量6/标识符6  UNTIL  条件3

 

 

 

 

 

这些资料整理自清华大学出版社1994年出版的《COBOL语言》,分上下册两本。

                                                                       

阅读(5417) | 评论(4) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-03-27 09:39:45

请问COBOL如何连接ORACLE数据库,连接后如何执行SQL语句啊?