cobol `

COBOL

Chapter 1 : cobol概述

COBOL Common Business Oriented Language 的缩写。它不仅是商业数据处理的理想语,
而且广泛用于数据管理领域,因此COBOL 语言也被称为用于管理的语言

一. COBOL 语言的特点
        最适于数据处理领域:算数计算量少而逻辑处理量多,输入输出量大,数据间存在着一定的逻辑  关系,大量的分类排序;COBOL比较接近英语,容易懂;通用性强,易移植,COBOL结构严谨,层次分明.

二.COBOL的组成部分:
1
。标识部(IDENTIFICATION DIVISION):用于标识程序名。
2
。环境部(ENVIRONMENT DIVISION):用于说明程序运行的环境。

3
。数据部(DATA  DIVISION):用于说明程序中涉及的所有数据。

4
。过程部(PROCEDURE DIVISION):是程序的核心部分,它决定计算机应进行       什么操作。
 
三.最简单的
COBOL 程序举例:
COL 1 ---678   12---7273---80
           IDENTIFICATION DIVISION

           PROGRAM-ID
PSAMPLE1

           ENVIRONMENT DIVISION

           DATA DIVISION

           PROCEURE DIVISION

               DISPLAY
THIS IS A COBOL PROGRAM.’。

               STOP RUN
 
四.
COBOL 源程序的书写格式:
      
1 6 列为 “标号区”。       

7列为“注释区(*)
      
8至此11列,称为“A区”。部头,节头,段头,层号 01,层号 77 及文件描述符FD等应从A区开始写。

      
12至此72列,称为“B区”。写程序中的正文部分。如过程部中的句子只能从B区开始写。

      
7380列,称为“注释区”,编译时注释被舍弃。  
五.
COBOL字符集包括  
      
数字0 --- 9 ,字母 A--- Z a --- z , 专用字符:+  -  *  /  =  ,  . ; ( ) < > $ 及空格。属于系统字符集而不属于COBOL字符集的字符只能出现在COBOL 程序中的字符串里。
 
六.常量:
 
        COBOL
常量分为数值常量(如 100-29),非数值常量(如 ‘ABC’ )和表意常量(如 ZEROSPACEHIGH-VALUELOW-VALUE QUOTE ALL 常量)。  
七.
COBOL 所处理的数据的特点
      
层次的概念:数据间存在的从属关系。
      
文件的概念:多个记录可以组成一个文件。
 
      
记录的概念:具有一定层次关系的一组数据项的最大集合,它是内存中具有独立逻辑含义的最大存取项,具有最高层次。

 

 

Chapter 2 : 过程部初步---最基本的过程部语句

一.输入输出语句
1
ACCEPT语句:直接从终端键盘或系统指定的输入设备上输入数据。
     ACCEPT  
标识符 [FROM 助忆名
]
注:A。标识符(identifier)指的是能唯一地标识一个数据项的数据名,不能唯一地标识一个数据项的数据名不是标识符。标识符可以是组合项。

    B
。在ACCEPT语句中如不写FROM部分,如ACCEPT   A  ,则表示从系统隐含指定的设备上读入一个数据给A。如果不想从指定的设 备上输入,则要用FROM 选项,这时“助忆名”需要在环境部中事先说明和那种外部设备相联系。如:

ENVIRONMENT    DIVISION
。(环境部)

CONFIGRATION  SECTION
。(配置节)

SPECIAL-NAMES
。(专用名段)

CONSOLE   IS  ABC
如在过程部中有 ACCEPT  T  FROM ABC。 则表示要从控制台接收数据

2
DISPLAY语句:从计算机内存中输出到某一指定的输出设备上。

     DISPLAY  {
标识符1,常量1}[标识符2,常量2]。。。[UPON 助忆名
]
                      
( 标识符和助忆名的说明同上)

     ACCEPT
语句和DISPLAY语句不必定义文件适用于少量的数据输入输出。

3
READ语句COBOL语言中数据的输入输出主要是通过对外部文件的读写进行的。READ 语句就是从外部文件上读入数据输 出到程序中的数据项中。在程序中用到的所有文件都需要在环境部中指定程序中用到的文件名与实际外部文件的联系。数据部也要对文件加以描述。指定数据结构各数据项所占的内存单元长度以及数据形式。COBOL 的存取是以文件为对象以记录为单位的。

READ语句的最简单的格式为: READ 文件名 

  ENVIRONMENT DIVISION
  INPUT-OUTPUT SECTION

  FILE-CONTROL

          SELECT  IN-FILLE    ASSIGN  TO  
外部文件名。

为了存储读入的记录,必须在内存开辟一个与文件记录长度相等的存储区,即‘输入文件纪录区’。每一个输入文件都有相应的‘输入文件纪录区’,与之一一对应。亦即在数据部中描述文件的数据结构。

READ
语句:

4WRITE语句:将内存中的数据输出到外部设备,主要是由WRITE 语句来完成的。WRITE语句的最简单的格式为:
      WRITE       
记录名(注意WRITE语句的操作对象是记录,所以是‘记录名’而不是‘文件名’)
 
   LABLE RECORD IS OMITTED
:凡输出设备是打印机的都必须写明此句。如输出设备是磁盘,则仍用LABLE RECORD IS STANDARD

01
层定义‘输出纪录区’ 的名字为OUT-RECORD,由于 01层属于FD描述体,因此也就指定了

OUT-RECORD
OUT-FILE 的关系。

在用WRITE 语句输出一个记录之前,应向输出记录区传送数据。如已将数据传送到上述各数据项中,则在执行 W RITE   OUT-RECORD 语句后,则记录区中的数据通过打印机打印出来。

5OPEN语句:程序中如果需要读写文件,则该文件必须先用OPEN语句打开,系统在执行READWRITE以前先检查该文件是否已在规定的外部设备上准备就绪。
  OPEN
语句的一般格式为:

OPEN  INPUT 文件名1 [,文件名2]。。。
  OPEN  OUTPUT 
文件名3 [,文件名4]。。。     。。。

OPEN  I-O  文件名5 [,文件名6]。。。
6
CLOSE语句:当对一个文件的读或写的操作已完成,就应关闭该文件。
   CLOSE
语句的一般格式为:
 
   CLOSE 
文件名 1 [,文件名2]。。。

COBOL
通过2位长度的文件状态字(FILE-STATUS)来表示文件的操作结果是否成功,常见的文件状态值及意义
:

二.算数运算语句

1ADD语句:
ADD A TO C
    (C=C+A)

2SUBTRACT语句:
SUBTRACT A FROM C. (C=C-A)

   SUBTRACT A FROM C GIVING D.  (D=C-A)

3MULTIPLY语句:

MULTIPLY Y BY B.   (B=B*Y)

MULTIPLY Y BY B GIVING Z.   (Z=B*Y)
4
DIVIDE语句:

DIVIDE Y INTO B.   (B=B/Y)

DIVIDE Y INTO B GIVING Z.   (Z=B/Y)

DIVIDE A BY B GIVING C REMAINDER D.A除于B的商放入C,余数放入D.
5
COMPUTE 语句:

   
运算的优先级由高到低顺序为:(),正负号  ** *   /   +
-
                
如:C = 3 D = 5 E = 2 F = 1 则:

                 COMPUTE  B = -
C + D
* 2 /  E ** 3 -  F = -3
三.传送语句 (MOVE

    MOVE
语句用来实现内存中数据的传送(而不是内存和外设之间的传送)。
    MOVE
语句的一般格式为:

 MOVE 
标识符1    TO    标识符2 [,标识符3]。。。

 MOVE
语句的传送规则:

 1
,如果接收项和发送项在数据部中描述的类型和长度相同,则按字节一一对应传送。

 2
,如果接收项和发送项长度不相同,而二者都是数值数据项,则按小数点对齐处理。

 3
,对字母或字符数据(非数值型数据)的传送,按左对齐处理。

 4
,初等项和组合项之间可以相互传送。关于各类数据之间的传送规则将在第五章中介绍。

四.转移语句(GO  TO

    
当需要使程序改变正常执行的顺序时,可以使用无条件转移语句 GO  TO 。其一般格式为:

   
格式1 GO TO  过程名

格式2 GO TO  过程名1[,过程名2]。。过程名n DEPENDING ON  标识符
   
注意:只能转移到段或节的开头,不能转移到段或节的当中某一语句。段名或节名为过程名。

五.条件语句(IF

    
当需要根据给出的某些条件是否满足来决定应执行哪一部分语句时,可以使用条件语句IF

IF (A [NOT] > B) 等价于 IF (A [NOT] GREATER THAN B)
    IF (A [NOT] < B)
等价于
IF (A [NOT] LESS THAN B)
    IF (A [NOT] = B)
等价于
IF (A [NOT] EQUAL TO B)
    IF (A >= B)
等价于
IF (A GREATER THAN OR EQUAL TO B)
    IF (A <= B)
等价于 IF (A LESS THAN OR EQUAL TO B)

IF A IS [NOT] NUMERIC    数字和可选符号
    IF A IS [NOT] ALPHABETIC A~Z,a~z
字符和空格
    IF A IS [NOT] ALPHABETIC-LOWER a~z
字符和空格
    IF A IS [NOT] ALPHABETIC-UPPER A~Z
字符和空格
    IF A IS [NOT] CLASS-NAME      SPECIAL-NAMES
定义的字符集
   
例如:SPECIAL-NAMES.
              CLASS MYDEFINE IS "12345+ABCDE-".

格式1IF  条件  THEN  语句1  ELSE  语句2  END-IF.

格式2IF  条件  语句1  ELSE IF  语句2  ELSE 语句3  END-IF.

六.停止语句(STOP
   其一般格式为:   STOP  RUN. 终止主程序

七.EXIT PROGRAM

终止子程序并返回主程序
八.返回语句(GOBACK
   当出现于子程序时相当于EXIT PROGRAM

当出现于主程序时相当于STOP RUN

Chapter 3 : 标识部与环境部

一.标识部(IDENTIFICATION  DIVISION
        IDENTIFICATION       DIVISION.
        PROGRAM-ID.            
程序名。
        [AUTHOR
                 作者名。
]
        [INSTALLATION
     计算机设置场所。
]
        [DATE-WRITTEN
    源程序编写日期。
]
        [DATE-COMPILED
。 源程序编译日期。
]
        [SECURITY
              保密程度。
]
二.环境部(ENVIRONMENT  DIVISION
        ENVIRONMENT          DIVISION.
        CONFIGRATION         SECTION

        SOURCE-COMPUTER
     源计算机名。

        OBJECT-COMPUTER
      目标计算机名。

        [SPECIAL-NAMES
           专用名描述项。
]
        [INPUT-OUTPUT         SECTION

        FILE-CONTROL
      {文件控制描述体}。。。

        [I-O-CONTROL
       输入输出控制描述体
]]
1
CONFIGRATION  SECTION

 
专有名段的一般格式:

 SPECIAL-NAMES

        [DICIMAL-POINT    IS   COMMA
]
        [CURRENCY   SIGN IS  
非数值常量。
]    
        [
专用名      IS    助忆名。
]     
2
INPUT-OUTPUT   SECTION

      INPUT-OUTPUT  SECTION
包括两个段,即:FILE-CONTROL   I-O-CONTROLFILE-CONTROL段是为文件分配外部文件。I-O-CONTROL段的作用是可以指定目标程序运行时,几个文件共用一个内存区,以省内存。在此暂不作介绍。

FILE-CONTROL
段的主要功能是给程序中使用的文件命名。指出存放该文件的外部设备及其它有关文件控制的信息。对文件的描述是由SELECT子句实现的。FILE-CONTROL段的一般格式:

 INPUT-OUTPUT       SECTION

 FILE-CONTROL

 SELECT    
文件名    ASSIGN    TO   外部文件名

 [ORGANIZAION        IS 
   ]       (SEQUENCIAL , INDEXED , RELATIVE)
 [ACCESS     MODE    IS 
   ]       (SEQUENCIAL, RANDOM , DYNAMIC)
 [RECORD     KEY     IS  
   ]
 [FILE    STATUS     IS 
   ]

 

 

Chapter 4 : 数据部

一.数据部概述
1
。 数据部的作用是定义数据项属性,描述数据结构。所有在过程部中出现的数据项都必须在数据部中对它们的属性进行说明。包括数据项的类型,数据项间的关系,记录与文件的关系,文件的属性。
2
。 数据的层次和层号:COBOL中把有从属关系的数据用层次(level)关系来描述。数据的层次结构是:记录--》组合项--》初等项。如,在前面READ语句中定义的 IN-FILE 文件具有如下结构:

 01      IN-RECORD
   
           02     PROD-CODE PIC   9
4)。

           02     PROD-QUANTITY PIC   9
5)。

           02     PROD-PRICE PIC   9
6)。

           02     MANU-DATE
   
                    05   DATE-CCYY PIC   9
4)。

                    05   DATE-MM PIC   9
2)。

                    05   DATE-DD PIC   9
2)。

层次规定如下:

 
1)用来描述数据的层次结构的层号从0149。记录的层次最高,定为01层号。

 
2)从属项的层号比其下属项的层号高。层号不必要求连续。

 
3)从属于同一组合项但不互相从属的数据项具有相同的层号。

3。数据部的结构:  数据部中通常用到的有以下几个节:
 
1FILE SECTION:描述程序中用到的输入输出文件及其记录中各数据项的属性。

 
2WORKING-STORAGE SECTION:描述程序中用到的中间数据项。

 
3LINKAGE SECTION:描述与调用程序间发生数据传递的数据项。

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

二.文件节
1。文件节的作用:  程序中每一个输入或输出文件都要在文件节中加以描述。内容包括:文件名和文件属性;文件中包括的记录名字;每个记录中数据的层次关系;记录中各数据项的数据形式和占内存的大小。
2
。文件描述:          最简单的文件描述体的一般格式为:

   FD 
文件名

             LABLE      RECORD        IS           STANDARD
                      RECORDS      ARE  OMITTED
   DATA        RECORD        IS  
数据名

                      RECORDS      ARE        
3
。记录描述:记录描述体由01层号开始,后跟记录名。如果记录本身就是一个初等项,则在记录名后描述记录长度;否则,数据名后跟句点,下面定义记录的数据结构。如:

 DATA DIVISION

 FILE SECTION

 FD    IN-FILE
          LABLE    RECORD IS STANDARD

          DATA      RECORD IS IN-FILE-RECORD

 01     IN-FILE-RECORD          PIC         X
80)。

  DATA DIVISION

 FILE SECTION

 FD    IN-FILE
          LABLE    RECORD IS STANDARD

          DATA      RECORD IS IN-FILE-RECORD

 01     IN-FILE-RECORD          PIC         X
80)。

      01     IN-FILE-RECORD

          05     DATE  PIC   9
8)。

          05     PROD-CODE PIC   9
4)。

          05     PROD-PRICE PIC   9
6)。            

4
。数据项描述: 在每一个初等项的名字后跟一个PIC子句。用它来描述数据的类型和长度。PIC子句在下面详细说明。

5
。文件节的书写格式:   FDA区开始书写,01层号也从A区开始,其它层号可以从A区也可以从B区开始。为了看起来层次分明,最好从B区开始。

三.PIC 子句

PICPICTURE的缩写。PIC子句用来描述每一个初等项。它说明:(1)数据项是什么类型。(2)数据项占多大内存域。(3)是否需要按打印的要求准备有关字符。PIC子句的主要作用在于描述一个初等项的一般特征和编辑要求。

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)
长度30~999之间。

03 VAR PIC 9(4)V99
长度60.00~9999.99之间。
03 VAR PIC S9(5)V99
长度7-99999.99~99999.99之间。
03 VAR PIC 9(6)PPP
长度6,可以是10002000...,999999000

输入1234    显示1000
03 VAR PIC PPP999
长度30.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).
   
输入XYZVAR1显示的是"  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.
1
。数值型数据的描述:

9’描述符:  表示该位置上可以放入一个0 ~ 9 之间的数字。因此:
 01          A        PIC 999
          

 01          A        PIC 9
3)。

 
表示A可以存放000 ~ 999 之间的一个三位数。有几个9表示有几位数。

 
注意: (1)在数值型数据项中只能放数字不能放空格。

       (2)
用‘9’描述符只能表示整数,如输入小数部分,则小数部分被舍弃。

       (3)
如送入一个负数,则负号被舍弃。

V’描述符:指出在数值数据结构中隐含的小数点的位置。小数点不占内存单元。如:

 03         M         PIC   9
3V92)。

 
注意:(1)V在描述符的最后,则等于无小数点。

       (2)
一个数据的描述符中只能出现一个V

       (3)
进行数据传送或运算时,按隐含的小数点位置对准进行传送或运算。

       (4)V
表示的小数点只在传送或运算时起作用,不能被显示或打印出来。
 
S’描述符:如果想在数据项中放入一个带符号的数,可以用‘S’描述符。如:

 03         M         PIC   S9
3V92)。

 
注意:(1S描述符必须是最左边的一个描述符。

       
2)在内存中,S不占位数,在传送或运算时起作用。

2
。字母型数据的描述:字母型数据项用A描述符,在这种类型的数据项中只允许存放字母或空格。

3
。字符型数据的描述:由任意的COBOL字符组成的数据,称为字符型数据,它是非数值型的,不能用于计算。用X描述符来表示字符型数据。如:

 03         M        PIC   X
5)。

 
注意:(1)字符型数据可以用X描述符,也可以用9A描述符来描述。如描述数据

     
COB-74’可以用PIC  X6),也可以用    PIC   A3X92)。

            
2)字母型数据既可以用A描述,也可以用X

            
3)字符型数据中可以放数字。

4
。编辑型描述符:编辑型数据项只是作为输出数据时增加或改变某些所需的符号,起编辑作用,它不是作计算用的。下面分别介绍编辑数据项中用到的编辑描述符。

 
1)。插入小数点‘。’,用‘。’描述符。如:

               77         T        PIC   99
99

   (2
)。插入逗号‘,’作分位号,用‘,’描述符。如:

        02   A   PIC  999
99999。 (或PIC  93),93)。92))

 
3)。插入空格,用‘B’描述符。如:

               02         A        PIC   B9
3B

 
4)。插入正负号,用‘+’或‘-’描述符。如:

               02         A1      PIC   +9
3)。( PIC   93+

               02         A2      PIC   -9
3)。(或PIC  93-

        
注意:描述符‘+’,一侓加符号。描述符‘-’只对负值加负号。

 
5)。插入‘$’ 。如:

               02         A1       PIC   $999
99

               02         A2       PIC  +$99999

               02         A3       PIC  -$999
9

 
6)。浮动插入正负号和‘$

               02         A1       PIC  $$$99.99.
               02         A2       PIC  $$$$$.$$.  
               02         A3       PIC  ++9.99.  
 
7)。取消高位零,用‘Z’和‘*’描述符。在高位零的位置上代以空格或‘*’。如:

               02         A1       PIC  Z
5)。99

               02         A2       PIC  *
5)。*2)。
  
               02         A3       PIC  +ZZZ
ZZZZZZZ

               02         A4       PIC  -*
******99

 
8)。插入‘DB’和‘CR’字符。DBCR只能用作固定插入,当数值为负时,在编辑型数据项中最后两个字节中置DBCR,数值为正时,此两字节留空格。

5.常用数值型数据

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

1。工作单元节的作用:程序中用的数据项分为两部分,一部分是属于输入或输出文件的,另一部分是非输入或输出的数据。如一些中间变量或用作累计的数据项等。非输入输出的数据就应在工作单元节中描述,还可以用工作单元节来赋初值。
2
VALUE子句:用于给变量赋初值。如:

 02      A        PIC       9
3     VALUE   123

注意: 

1)只有对工作单元节中的数据项才能赋初值,不能对文件节中输入输出文件中的数据项赋初值。
 
2)如果在组合项的描述体中使用VALUE,初值只能是表意常量或非数值型常量。对组合项整体而言,一律按字符型数据项处理。

 
3)当用一个带符号的数值作初值时,相应的PIC子句中应有‘S’描述符。

 
4)赋初值时应该注意类型的一致性。

 
5VALUE子句给出的值应适合PIC子句的描述范围,否则会出现截断或产生错误。

 

Chapter 5 : 过程部

.MOVE 语句的较高技巧

 1。各种类型数据之间的传送规则见下表:(Y:表示合法传送。N:表示非法传送。空白:表示某些时候是合法的。)

接收项

数值型

数值型

数值编辑型

字母型

字符型

字符编辑型

组合项

发送项

整数

非整数

 

 

 

 

 

数值型整数

Y

Y

Y

N

Y

Y

Y

数值型非整数

Y

Y

Y

N

N

N

Y

数值编辑型

Y

Y

Y

N

Y

Y

Y

字母型

N

N

N

Y

Y

Y

Y

字符型

 

 

 

 

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

组合项

 

 

 

 

Y

Y

Y

.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

.PERFORM
   
过程调用,但是不传递参数。
PERFORM PROC1 [THROUGH PROC2] 
   
执行完PROC1再执行PROC2.没有THROUGH(THRU)就只执行PROC1.
PERFORM PROC1 [THRU PROC2] N TIMES
   
执行PROC1[或者还有PROC2]N次。

PERFORM PROC1 [THRU PROC2] [WITH TEST BEFORE/AFTER] UNTIL A NOT EUQAL 0.
   
执行PROC1[或者还有PROC2]直到A不等于0WITH TEST BEFORE/AFTER指定在第一次执行之前还是之后判断条件。默认是BEFORE,执行之前判断。
PERFORM PROC1 [THRU PROC2] [WITH TEST BEFORE/AFTER] VARYING A FROM B BY C UNTIL CONDITION1 [AFTER D FROM E BY F UNTIL CONDITION2].
   
相当于FOR循环,将A的值从B开始,以C为单位递增,直到满足CONDITION1AFTER语句是一个嵌套的FOR 循环。VARYING是外循环,AFTER是内循环。AB可以是索引。

  过程也可以直接写入PERFORM中。但是THROUGH就不好用了。语法如下:
  PERFORM
过程语句 END-PERFORM.
  PERFORM N TIMES
过程语句
END-PERFORM.
  PERFORM [WITH TEST BEFORE/AFTER] UNTIL CONDITION
过程语句
END-PERFORM.
  PERFORM [WITH TEST BEFORE/AFTER] VARYING A FROM B BY C UNTIL CONDITION1
过程语句 END-PERFORM.

.EVALUATE

EVALUATE
   
相当于SWITCH CASE语句。
    EVALUATE A
        WHEN B ...
        WHEN 0 THRU 100 ...(FROM 0 TO 100)
        WHEN OTHER ...
    [END-EVALUATE]
   
首先得到A的结果,和WHEN语句的参数比较,如果和B相等,就执行B后的操作,执行完了不再执行后面的WHEN语句。如果不等就执行下一条WHEN语句。如果没有相等的就执行WHEN OTHER语句。
    EVALUATE A ALSO B
        WHEN C ALSO D ...
        WHEN E ALSO F ...
        WHEN OTHER ...
   
对于有多个判断条件的,要多个条件同时满足。如上要C=A同时D=B,才执行WHEN语句。

 

 

 

 

Chapter 6 : 各部之间的关系

 

IDENTIFICATION   DIVISION.
PROGRAM-ID.        PROGRAM1.

给程序加上标识以便识别.

ENVIRONMENT  DIVISION.
CONFIGRATION   SECTION.
INPUT-OUTPUT    SECTION.
FILE-CONTROL.
        SELECT    PRODFILE  ASSIGN  TO FILE1.

描述程序中用到的文件与外部文件的关系及控制信息

DATA  DIVISION.
FILE   SECTION.
FD    PRODFILE    LABEL  RECORD  IS  STANDARD.
01     PROD-REC      PIC      X(200).  
WORKING-STORAGE   SECTION.
01     WS-VARIBALES.
       05   WS-I   PIC      9(2).

描述程序中用到的所有文件及其记录中各数据项的属性及程序中用到的所有中间数据项的描述.

PROCEDURE  DIVISION.

程序的核心部分,他决定计算机进行什么操作.,文件的读写及其他处理

 

        内容补充:

 

        X型数据和单纯的9类型的数据以ASCII码的形式存储,占位数与定义长度一致

 

        V在文件中不占位,小数点的具体位置要根据中间文件确定。

 

        S型数据,S同样不占位,以ASCII码的形式存储。但存储数据为负时,数据的最后一字节的第7位被置为1(正数为0

 

        COMPUTATIONAL

        一般情况下,当数据是金额、数量等情况。会采用COMP格式的数据。

        采用COMP(压缩格式)的数据能节省内存,在ONLINE的程序中一般用作电文数据的格式。

 

        1COMP-5数据在文件中为二进制形式,按字节读取转换,在文件中占位如下:

 

                        9(1)--9(4):2

                        9(5)--9(9):4

                        9(10)--9(1:8

                        9(1以上:非法数据

 

        2)当COMP-5数据的值为负数形式时:存储方式为正数形式的补码

                例:

                定义形式-- 9(4) 占位数-- 2

                赋值:152116进制数05 F1,补码是 FA 0F

                存储结果(16进制)--F1 05  (二进制) -- 11110001 00000101

                定义形式-- S9(4) 占位数-- 2

                赋值:-1521

                存储结果(16进制)--0F FA  (二进制) -- 00001111 11111010

 

        3COMP-5数据中出现 V 定义的情况时,存储形式不受影响

                例:

                定义形式-- S9(3)V9(2)  占位数-- 4

                赋值:932.11 9321116进制表示:00 01 6C 1B

                存储结果(16进制)-- 1B 6C 01 00  (二进制) 00011011 01101100 00000001 00000000

                赋值:-932.11

                存储结果(16进制)-- E5 93 FE FF  (二进制) 11100101 10010011 11111110 11111111

 

        4COMP-3数据类型同样以二进制的形式保存在文件中,其占位数计算方式如下:

                  占位数=[定义长度/2+1]     []表示取整

 

        5COMP-3数据在文件中存储形式如下例:

                例如:定义形式--  9(4) COMP-3,占位数=[定义长度/2+1]=3

                赋值:1521

                存储结果:01 52 1F (F表示正数)

                赋值:0

                存储结果:00 00 0F

 

        6COMP-3带有符号位时,赋值为正时,最后半个字节为16进制C;赋值为负时,最后半个字节为16进制D

                例如:定义形式--  S9(4) COMP-3,占位数=[定义长度/2+1]=3

                存储结果:01 52 1D (D表示负数)

                赋值:1521

                存储结果:01 52 1C

                注意:当COMP-3的数据定义无S,赋予负值时,最后半个字节仍为F,即无法显示负数

 

        7)定义COMP-3数据时使用 V 的话,所占字节数与存储方式与(上记46)相同。

 

 

COBOL程序格式

COBOL源程序的格式如下:

     每行开头有6个字符的序号区。可以输入000010000020等表示行,也可以不输。

     序号区后面是一个字符(第7位)的指示符区,如第一行所示。可以用*/表示注释,_表示续行,D表示调试。

     指示符区后面是4个字符(8~11位)的A区。可以放入部,节,段标题,段名,层指示符和层号0177

            关键字DECLARATIVESEND DECLARATIVES,程序结束标题。

     A区后面(12位以后)是语句体,称为B区。过程部的语句必须从B区开始。B区宽度通常为7280个字符。

            本例是70个字符。

     空行的每个区都是空格

 

标识部(2~4行),PROGRAM-ID段包含程序名,是每个程序都必须的。AUTHOR等其他段是可有可无的。

         

环境部(5~15行),提供与程序外部有关的项目,具体地说,就是列出程序所用的文件。如果不需要可以省略。

          环境部有配置节(6~10行)和输入输出节(11~15行)。

          7行表示编译程序的计算机。如果指定WITH DEBUGGING MODE就编译调试行。

          8行表示程序运行的计算机。

          910行包含一组指定输出样式。这里是标准输出,可以自定义。

          输入输出节只用于文件。

          1315行表示如果程序使用文件,则这个段对每个文件包含一个项目。

                  文件控制项目的格式取决于文  件的描述类型。

         

数据部(16~22行),提供程序变量的存放位置,对不同的数据类型分成不同的节:文件数据(File Section)、

          静态数据(Working-Storage Section)、参数(Linkage Section)、通信(Communication Section)、

          报表(Report Section)。

    文件节(18~21行),每个文件描述中包含文件所含纪录的定义,文件节中的数据或从文件读取,

          或由写文件的程序产生。

    22行表示工作存储节,这节包含程序所需的临时结果和初始化静态数据的数据。

    参数(Linkage Section)包含调用程序传递的数据(其他语言中称为参数)。

    通信(Communication Section,处理COBOL程序和通信设备之间的消息。

    报表(Report Section),报表节实现COBOL报告编写工具系统所需的数据。

     2021行的PICPICTURE的缩写,表示定义数据格式。

            X(12)表示12个字符的字符串,9(09)表示9位的整数。可以将基本项目组成层次结构,称为组数据项或组。

 

COBOL程序中的数据项的定义从层号开始,01层是最高层,49层是最低层。

          77层项目用于某个组的数据项,如程序中的临时变量。

          66层是为特殊描述符项目保留的,可以更名现有的数据项或组,或以原定义未允许的方式组合。

          88层是对特殊数据项目条件名保留的

          如:

          03 STATE PIC XX.

          88 NEW-ENGLAND VALUES ARE "1","2","3","4","5".

          IF NEW-ENGLAND ... then do something

         

过程部(23~30行),包含构成程序的过程性语句。

          DECLARATIVES的过程部。有些程序用特殊的USE语句表示遇到特殊条件时要执行的过程,

                 如发生I/O错误时。

                 USE语句组合在一起,放在过程部开头,由关键字DECLARATIVESEND DECLARATIVES限定。

          24行相当于定义了一个名字叫ACAB030100-PROC()的函数。

          2529行定义了标志,可以用GO TO 语句跳转到这个地方,执行下面的语句。

          26行在屏幕上打印,相当于printf("ACAB030100-START");

          27行是调用ACAB030100-PROC()函数。

  • 1
    点赞
  • 1
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值