Cobol学习笔记(整理中80%)

2023-09-17 13:06:16

1. 数据类型

1.1 变量定义

序号 数据名 PIC 数据类型 [VALUE 值].

例:03 MY-ID PIC 999 [VALUE 123].  数据类型写几个长度就是几。

1.2 数据类型

1.2.1 数值型

9:数值型,99999 缩写 9(5),不满位前补0, 0有(+)符号。

S:正负数值,S9999 缩写 S9(4),不满位前补0,值有正负符号。

V:小数,99V999 缩写 9(2)V9(3),正数前补0,小数后补0,输出不显示小数点

P:固定值0,P99 缩写 P(2),P代表固定数值0

Z:数值型占位,ZZZ99 缩写 Z(3)9(2),不满位Z位补半角空格

1.2.2 字符型

A:字母形,AAA 缩写 A(3),不满位后补半角空格,只能存(a-zA-Z)和半角空格

X:字符型,XXX 缩写 X(003),不满位后补半角空格,只能存半角的(文字字母数值符号)

N:全角字符,NNN 缩写 N(003), 不满位后补半角空格,可以存全角或半角文字。

1.2.3 组合型

$999 缩写 $9(3),例:$123

99.99 缩写 9(2).9(2),例:12.34 ,DISPLAY输出有小数点

S99,999,999 缩写 S9(2),9(3),9(3),例如:+12,345,678

1.3 常量

1.3.1 表意常量

ZERO:1个以上0,99→00,9V9→00,9.9→0.0,A→不可赋0,X(2)→'00',N(2)→'0000'

SPACE:1个以上半角空格, 99,9V9,9.9→数值不可赋值空格, AA→'  ',XX→'  ', NN→'    '

LOW-VALUE:1个以上最小值, 99,9V9,9.9→数值不可赋值, A(2),X(2)→2*low, N(2)→4*low

HIGH-VALUE:1个以上最大值, 99,9V9,9.9→数值不可赋值, A(2),X(2)→2*HIGH,N(2)→4*HIGH

ALL 字符:1个以上该字符,

注释:ZEROS,SPACES等与上记含义相同,表意常量不赋予数据时直接输出长度为1,LOW-VALUE输出看起来像SPACE,实际两个值不相等。

1.3.2 数值常量

03 NUM-1 PIC 999 VALUE 123.

注释:常量只是初期了值的变量,形式上不对其值改变,实际可以改变它的值。数值常量最多18位

1.3.3 非数值常量

03 STR-1 PIC XXX VALUE 'abc'.

注释:用引号括起来的字符,单双引号同样, 字符最多160个

1.4 数值压缩型

1.4.1 进制型(COMP)

03 NUM-2 PIC 999 COMP VALUE 123.

注释:二进制型,只能对数值使用,全称COMPUTATONAL,将通常存储的4bit数值以2bit存储,无法通过输出人为确认,只能用于机器识别。

1.5 数据传送(MOVE TO)

1.5.1 传送语句

单目标传送:MOVE A TO B.   // 将A赋值给B

多目标传送:MOVE A TO B,C. // 将A赋值给B和C

注释:元数据长度不足,不保留目标的数据值

9或X TO 9型,从右向左依次赋值,不足左补0,超出左截掉

9或X TO 9V9,元数据(无点)从右向左个位开始赋值,小数默认为0,不足左补0,超出左截掉

9V9 TO 9V9,整数从右向左赋值,小数从左向右赋值,不足两侧补0,超出两侧截掉。

9,9V9,X TO X,由左向右赋值(不含数值正负号,V不含点,9.9含小数点)不足后补空格,超出后截掉。

X,A TO A,由左向右赋值,不足后补空格,超出后截掉

注释:可赋值给A的值与X同效果。只有9V9和9.9相互之间可以给小数赋值,9V9不存点所以赋值目标9AX也不含点。

1.5.2 不同类型传送

A 不可给 9, S9, 9V9, 9.9等数值类型赋值。

A 不可接收 9, S9, 9V9, 9.9等数值类型的赋值。

S9 赋值给其他类型,负号变正好。

注释:避免字符X给9赋值 数值以外的值,赋值可正常编译运行,打印会变符号。

1.5.3 截位传送

截元数据给目标:MOVE  A(开始位 : 长度)  TO B  // 按目标B补位,字符右补空额或截取,数值左补0或截取。

数据给目标对应位数:MOVE  A  TO  B(开始位 : 长度)  // 将目标对应位数当字符,不足右补空格或超出右截取,对指定的目标范围外的数据无影响。

注释:全角占2位,截取全角(应该从单数开始,避免半位),元数据双数开始默认前面加1位,目标数据不可用双数位截取。

1.6 数据初始化

(1) 初期化:INITIALIZE  WORK-AREA.   // 将数值初期化为0,字符初期化为空格

注释:未初期化的数据都是LOW-VALUE(包括数值型)

(2) 占位:FILLER

01 WORK-WREC.
  03 NUM PIC 999.
  03 STR PIC XXX.
  03 FILLER PIC XXX.

注释:INITIALIZE无法初期化FILLER项目

(3) 含FILLER项目的初期化:

MOVE SPACE TO WORK-WREC. 
INITIALIZE WORK-WREC.

注释:MOVE SPACE 先将所有项目赋值为空格,INITIALIZE将数值项目初期化为0

2. 运算符

2.1 算术运算

2.1.1 加算

(1) A = A1 + A2 + A3

COMPUTE  A = A1 + A2 +A3.  
ADD A1, A2, A3 GIVING A.  
ADD A2, A3 TO A1 GIVING A.

(2) A = A + B.

COMPUTE A = A + B.  
ADD B TO A.

2.1.2 减算

(1) COMPUTE A = A1 - A2 - A3.  (SUBTRACT A2, A3 FROM A1 GIVING A.)

(2) COMPUTE A = A - B.  (SUBTRACT B FROM A.)

2.1.3 乘算

(1) COMPUTE A = A1 * A2 * A3.  (MULTIPLY A2, A3 BY A1 GIVING A.)

(2) COMPUTE A = A * B.  (MULTIPLY B BY A.)

2.1.4 除算

(1) COMPUTE A = A1 / A2 / A3.  (DIVIDE A1 BY A2,A3 GIVING A.  DIVIDE A2,A3 INTO A1 GIVING A)

(2) COMPUTE A = A / B.  (DIVIDE A BY B.  DIVIDE B INTO A.)

2.1.5 余算

(1) DIVIDE A2 INTO A1 GIVING A REMANDER B.  // a=a1/a2. b=a1%a2

(2) DIVIDE A1 BY A2 GIVING A REMANDER B.    // a=a1/a2.  b=a1%a2

注释:余算不能用COMPUTE计算。GIVING后不能是常量,无GIVING则将值赋值给TO后变量

加减算中间值:整数位数=两个数最大整数位+1,小数=最长小数位数(1.2+34.56 > 000.00)

乘算中间值:整数=两个数整数相加,小数=两个数小数相加 (1.2*34.56  > 000.000)

除算中间值:整数=左侧整数+右侧小数,小数=计算式中最长小数 (34.56/1.2 > 000.00)

2.2 比较运算

2.2.1 比较条件

大于 ( > ),关键字 大于 ( IS GREATER THAN )

小于( < ),关键字 小于 ( IS LESS THAN )

大于等于( >= ),关键字 不小于 ( NOT LESS THAN )

小于等于( <= ),关键字 不大于 ( NOT GREATER THAN )

等于( = ),关键字 等于 ( IS EQUAL TO )

不等( NOT = ),关键字 不等 ( NOT EQUAL TO )

2.2.2 符号条件

变量或表达式 是正数 (A IS POSITIVE )(表达式 IS POSITIVE)

变量或表达式 是负数 (A IS NEGATIVE )(表达式 IS NEGATIVE )

变量或表达式 是0 (A IS ZERO )(表达式 IS ZERO)

变量或表达式 不是0 (A IS NOT ZERO )(表达式 IS NOT ZERO)

2.2.3 类型条件

是数值: IS NUMERIC

不是数值:IS NOT NUMERIC

是字母:IS ALPHABETIC

不是字母:IS NOT ALPHABETIC

注释:9型不可用ALPHABETIC判断,

X型空格字母IS ALPHABETIC得到true(LOW-VALUE,1,A1)得到false

X与9型 值是0-9 IS NUMERIC 得到true(LOW-VALUE, 1,A1,空格)得到false

9型,不能与LOW-VALUE判断,需要给外层加一个没有类型的层级,可以判断外层。

定义未初期化的值是LOW-VALUE

2.2.4 复合条件

优先级:NOT > AND > OR

3. 流程控制

3.1 分歧条件

3.1.1 IF条件

(1) IF 条件     语句.

(2) IF 条件1    IF 条件2    语句.

(3) IF 条件      语句(可嵌套IF...END IF)    ELSE   语句    END IF.

注释:IF条件以点结束,只有最外层IF可以用点结束,条件可以用AND,OR连接,IF A=B OR C (if a=b or a=c)

3.1.2 EVALUATE条件

(1) 单字段,单判断:EVALUATE 变量 WHEN 常量 语句 ...WHEN OTHER 语句 END EVALUATE.

(2) 单字段,多判断:EVALUATE 变量 WHEN 常量 WHEN 常量 语句 ... END EVALUATE.

(3) 多字段,判断:EVALUATE 变量 ALSO 变量 WHEN 变量 ALSO 变量 语句... END EVALUATE.

注释:传值与判断的变量与常量可以互换,ALSO可以加多个,引数与条件个数与顺序必须一致。

3.2 循环

3.2.1 PERFORM

(1) 外PERFORM

MAIN-RTN.
  //1
  PERFORM FOR1-RTN THRU FOR1-END.
  //3
  PERFORM FOR2-RTN.
  PERFORM STOP-RTN.
MAIN-EXT.

FOR1-RTN
  //2
  GO TO FOR1-END.
FOR1-END.
  EXIT.

FOR2-RTN.
  //4
  GO TO FOR2-END.
FOR2-END.
  EXIT.

STOP-RTN.
  //5
  STOP RUN.
STOP-END.
  EXIT

注释:有THRU会使GOTO正常返回执行,没有THRU的GOTO会使程序混乱。

EXIT 可以是没有GOTO的不加THRU的过程正常终止。

CONTINUE 和 NEXT SENTENCE相当于没有代码继续执行。

(2) 内PERFROM

PRO-RTN.
  处理...
  PERFORM
    处理...
  END-PERFORM.
  处理...
PRO-EXT.
  EXIT.

注释:内PERFORM主要用于循环

3.2.2 PERFORM UNTIL

(1) UNTIL终止循环方式

方式1:UNTIL 后跟表达式例如(A > 2)( NUM = 0 )

方式2:UNTIL 后跟88层变量 ( UNTIL RTN-E) 相当于判断 RTN-S = 9

77 RTN-S PIC 9 VALUE 0.
  88 RTN-E VALUE 9.

(2) 先判断后执行

PERFORM 过程-S THRU 过程-E WITH TEST BEFORE UNTIL 条件.

注释:可省略 WITH TEST BEFORE,先判断UNTIL后条件,满足则不执行循环。

(3) 先执行后判断

PERFORM 过程-S THRU 过程-E WITH TEST AFTER UNTIL 条件.

注释:先执行过程,后判断条件,不满足则不再循环第二次。

(4) 内循环

PERFORM UNTIL 条件 处理... END-PERFORM.

3.2.3 PERFORM TIMES

(1) 外循环

指定循环次数:PERFORM 过程-S THRU 过程-E 整数变量 TIMES.

注释:过程执行中变数变化不影响循环次数,

(2) 内循环

指定循环次数:PERFORM 整数变量 TIMES 处理... END-PERFORM.

3.2.4 PERFORM VARYING

(1) 外循环

PERFORM 过程-S THRU 过程-E VARYING 变量 FROM 初值 BY 步长 UNTIL 条件.

注释:循环过程,变量的开始值是初值,每次循环加步长,直到满足UNTIL条件退出循环。

(2) 内循环

PERFORM VARYING 变量 FROM 初值 BY 步长 UNTIL 条件 处理... END-PERFORM.

3.2.5 循环嵌套

PERFROM POR1-RTN THRU POR1-EXT
  VARYING 变量1 FROM 初值1 BY 步长1 UNTIL 条件1
  AFTER 变量2 FROM 初值2 BY 步长2 UNTIL 条件2

注释:变量1的循环套变量2的循环。

4. 调子程序(CALL)

外部文件

PROGRAM-ID xxx001

DATA DIVISION.
  LINK AGE SECTION.
  01 数据 PIC 9.
  01 数据 PIC 9.

PROCEDUE DIVISION [USING 数据1, 数据2]
  处理...
EXIT PROGRAM.

自身文件

(1) 指定子程序名,子程序没有参数可写USING 和参数,参数个数与顺序必须一致。默认引用传递

过程-S
  处理...
  CALL 'xxx001' USING 引数1, 引数2

(2) BY CONTENT 值传递

过程-S
  处理...
  CALL '子程序名' USING BY CONTENT 引数1, 引数2

5. 复写(COPY)重定义(REDEFINES) 重命名(RENAME)

5.1 复写(COPY)

5.1.1 外部数据文件

01 A
  03 AA
    05 A1 PIC 9.
    05 A2 PIC 9.
    05 A3 PIC 9.

注释:外部文件只有数据结构,没有部节等信息。

5.1.2 外部过程文件

子过程-S
  处理...
子过程-E
  EXIT.

注释:外部过程文件只有过程,没有部节信息。

5.1.3 引用外部数据文件

DATA DIVISION.
  COPY 外部数据文件名.
  COPY 玩不数据文件名 REPLACINT 别名-.

PROCEDUE DIVISION.
  MOVE A1 TO XX.
  MOVE 别名-A1 TO XX.

5.1.4 引用外部过程文件

PROCEDUE DIVISION.

过程...
  PERFORM 子过程-S.
过程...

COPY 子过程文件名.

5.2 重定义(REDEFINES)

03 YMD.
  05 YMD-YYYY PIC 9(4).
  05 YMD-MM   PIC 9(2).
  05 YMD-DD   PIC 9(2).
03 YMD-2 REDEFINES YMD.
  05 YMD-2-YYYYMM PIC X(6).
  05 YMD-2-DD     PIC X(2).

注释:重定义共享内存地址,一个质变了影响另一个值,不能用在文件节01层,可用在数据单元节01层,层号必须相同,长度相同,重定义子句不能赋初值。

5.3 重命名(RENAME)

03 A
  05 YEAR  PIC 9(4).
  05 MONTH PIC 9(2).
  05 DAY   PIC 9(2).
03 B
  05 NAME  PIC X(20).
  05 AGE   PIC 9(2).

66? C REANME A.?
66? D REANME DAY TO NAME.?

注释:必须在数据部最后定义重命名,只能是xx层,共享内存数据,可以夸层级指定数据范围。

5.4 输出(DISPLAY)

DISPLAY XXX.
DISPLAY 'abce'.
DISPLAY 'abce' XXX.

5.5 输入(ACCEPT)

6. 表(OCCURS)

不能将OCCURS(表,数字)定义在01,66,77,88层

6.1 定长表

6.1.1 单类型

(1) 表名 OCCURS 长度 [TIMES] PIC 数据类型.

(2) 表名 PIC 数据类型 OCCURS 长度 [TIMES].

01 OC1-TABLE.
  03 ROW-T1  OCCURS  5  TIMES  PIC  9(02).
  03 ROW-T1  OCCURS  5         PIC  9(02).
01 OC2-TABLE.
  03 ROW-T1  PIC  9(02)  OCCURS  5  TIMES.
  03 ROW-T1  PIC  9(02)  OCCURS  5.

6.1.2 多类型

(1) 表名 OCCURS 长度 [TIMES].

01 OC3-TABLE.
  03  ROW-T3  OCCURS  3  TIMES.
    05  T-YYYY  PIC  X(4).
    05  T-MM    PIC  X(2).
  03  ROW-D3  OCCURS  3.
    05  R-DATA1 PIC  X(2).
    05  R-DATA2 PIC  X(3).

6.2 变长表

表名 OCCURS 最小整数 TO 最大整数 [TIMES] DEPENDING [ON] 9型数据

01 OC4-TABLE.
  03 ROW-T4 OCCURS 1 TO 3 TIMES DEPENDING ON CST-N3.
    07 OC4-R-T1 PIC X(2).
  03 ROW-D4 OCCURS 1 TO 3 TIMES DEPENDING    CST-N3.
    07 OC4-R-D1 PIC X(2).
  03 ROW-E4 OCCURS 1 TO 3       DEPENDING    CST-N3.
    07 OC4-R-E1 PIC X(2).

注释:根据9型数据的变化,表的长度同时变更,需要在指定表之前指定9型数据的值。

6.3 表的初期化

方式1:初期化表的外层数据型

方式2:VALUE IS指定外层初期値

方式3:表外层重定义有值数据

方式4:循环元素,挨个赋值

DATA DIVISION.
01 OC1-TABLE.
  03 ROW-T1  OCCURS  5  TIMES  PIC  9(02).

01 OC2-TABLE VALUE IS ZERO.
  03 ROW-T2  OCCURS  5         PIC  9(02).

01 OCA-TABLE.
  03 FILLER  PIC  X(20) VALUE ALL 'A'.
01 OC3-TABLE REDEFINES OCA-TABLE.
  03 ROW-T3  OCCURS  3  TIMES.
    07 T-YEAR PIC X(4).

01 OC4-TABLE.
  03 ROW-T4  OCCURS  3  TIMES.
    07 T-YYYY PIC X(04).

PROCEDURE DIVISION.
MAIN-RTN.
  INITIALIZE OC1-TABLE.

  MOVE ZERO TO IDX.
  PERFORM UNTIL IDX > 2
    INITIALIZE  ROW-T4(IDX).
    ADD 1 TO IDX
  EDN-PERFORM.
MAIN-EXT.
  EXIT.

6.4 表元素取值

6.4.1 引用元素本身

MOVE 表名(下标) TO XX.   

注释:下标从1开始

6.4.2 不同表的相同属性

MOVE 属性名 OF 表名(下标) TO XX.

7. 文件

7.1 读文件(READ)

7.1.1 环境部

FILE-CONTROL
  SELECT 文件别名 ASSIGN 源文件名 ORGNIZATION IS SEQUENTIAL

7.1.2 数据部(文件节)

FILE SECTION.
  FD 文件别名 RECORD 行字节数 CHARACTERS.
  01 文件行名-REC.
    03 文件列名1-DATA PIC X(列长度).
    03 文件列名2-CRLF PIC X(换行长度2).

7.1.3 数据部(工作单元节)

WORKING-STORAGE SECTION.

// 方式1:内部数据结构定义
01 WREC.
  03 列1 PIC 9(1).
  03 列2 PIC 9(2).

// 方式2:外部数据结构引入
COPY 外部数据结构文件名 [REPLACING 别名].

注释:需要在工作单元节正常数据模型的最后引入外部的数据模型

7.1.4 过程部

OPEN INPUT 文件别名.

READ 文件别名 INTO 别名-WREC  // 读一行数据,给数据结构
  AT END                     // 当读不到数据,执行下一行代码
  MOVE 9 TO XX-STATUS        // 将文件状态设置为9(为了判断终止)
  [GO TO END]
END READ.

IF 文件列名-CRLF = X'0D0A'   // 判断换行符
  CONTINUE
ELSE
  异常处理
END-IF.

CLOSE 文件别名.

7.2 写文件(WRITE)

7.2.1 环境部

FILE-CONTROL.
  SELECT 文件别名 ASSIGN 源文件名 ORGANIZATION IS LINE SEQUENTIAL.

7.2.2 数据部(文件节)

FILE SECTION.
  FD 文件别名 RECORD 数据长度 CHARACTERS.
  01 文件行-REC PIC X(数据长度)

7.2.3 数据部(工作单元节)

WORKING-STORAGE SECTION.
  // 方式1:内部定义
  01 WREC.
    03 列1 PIC 9(1).
    03 列2 PIC 9(2).

  // 方式2:外部引用
  COPY 外部文件名 [REPLACING 别名].
  

7.2.4 过程部

OPEN OUTPUT 文件别名.

WRITE 文件行-REC FROM 别名-WREC.

CLOSE 文件别名.

8. DB

8.1 外部数据模型

EXEC SQL BEGIN DECLARE SECTION END-EXEC.
  01 SQL1-VAR.
    03 SQL1-DATA.
      05 NAME PIC X(10).  // 查询字段
      05 AGE  PIC 9(02).
    03 SQL1-WHERE
      05 CODE1 PIC A(10). // where条件
    03 SQL-1-IND.
      05 NAMEI PIC X(10). // 非空标识想买
EXEC SQL END DECLARE SECTION END-EXEC.

8.2 外部SQL文件

8.2.1 单条查询

// 本地文件
MOVE XX TO CODE1.

// SQL文件
EXEC SQL 
  SELECT 项目1
  INTO :NAME,
       :AGE
  FROM 表名
  WHERE 项目2= :CODE1
END-EXEC.

注释:COBOL查询不能处理多条检查结果,单条结果可以用查询,多条结果用游标

8.2.2 多条查询

// 定义打开游标
CUR1-OPEN-RTN
  EXEC SQL DECLARE 游标名 CURSOR FOR
    SELECT 项目
    FROM 表名
    WHERE 项目2 = :CODE1
  END-EXEC.
CUR1-OPEN-EXT.
  EXIT.

// 定义游标赋值
CUR1-FETCH-RTN.
  MOVE -1 TO NAMEI.  // 初始化空项目判断项目

  EXEC SQL
    FETCH 游标名 INTO :NAME :NAMEI, AGE
  END-EXEC.

  IF NAME1 = -1    // 判断项目是否为空,数据库为NULL则不赋值
    MOVE LOW-VALUE TO NAME.
CUR1-FETCH-EXT.
  EXIT.

// 定义关闭游标
CUR1-CLOSE-RTN.
  EXEC SQL CLOSE 游标名 END-EXEC.
CUR1-CLOSE-EXT.
  EXIT.

8.3 程序调用

WORKING-STORAGE SECTION.
  ...
  EXEC SQL
    COPY 数据模型文件
  END-EXEC.

PROCEDUE DIVISION.

MAIN-RTN.
* 打开游标
  PERFORM CUR1-OPEN-RTN THRU CUR1-OPEN-EXT.
* 循环游标
  PERFORM CUR1-FETCH-RTN THRU CUR1-FETCH-EXT UNTIL XX.
* 关闭游标
  PERFORM CUR1-CLOSE-RTN THRU CUR-CLOSE-EXT.
MAIN-EXT.
  EXIT.

XXX-XX SECTION. //自定义节
  EXEC SQL
    COPY SQL文件
  END-EXEC.

8.4 插入

XXX-INSERT-RTN.
  EXEC SQL
    INSERT INTO 表
    VALUES
    (:NAME,
     :AGE)
  END-EXEC.
XXX-INSERT-EXT.
  EXIT.

8.5 更新

XXX-UPDATE-RTN.
  EXEC SQL
    UPDATE 表
    SET
      项目名 = :NAME,
      项目名 = :AGE
    WHERE 项目名 = :CODE1
  END-EXEC.
XXX-UPDATE-EXT.
  EXIT.

9. 文件结构

9.1 程序结构

* 标识部 必须 //定义作成者,时间等信息
IDENTIFICATION DIVISION.
...

* 环境部 //用于指定输入输出文件
ENVIRONMENT DIVISION.
...

* 数据部 // 用于定义变量,引入外部变量
DATA DIVISION.
...

* 过程部 // 用于写程序逻辑,引入外部过程
PROCEDUE  DIVISION.
...

9.2 标识部(IDENTIFICATION DIVISION)

* 标识部
IDENTIFICATION DIVISION.
* 必须写
  PROGRAM-ID 程序ID. 
  AUTHOR     作成者.  
  DATE-WRITTEN 程序编写日期.
  DATE-COMPILED 程序编译日期.
  INSTALLATION 计算机场所.
  SECURITY 计算机保密程度(例:HIGH).

9.3 环境部(ENVIRONMENT DIVISION)

* 环境部
ENVIRONMENT DIVISION.

* 配置节 必须写 内有2个段
  CONFIGURATION SECTION.
    SOURCE-COMPUTER 源计算机(编译程序系统).
    OBJECT-COMPUTER 目标计算机(执行程序系统).

* 输入输出节 有文件操作则必须写 内有2个段
  INPUT-OUTPUT SECTION.
*   文件控制(提供程序中使用的外部数据)
    FILE-CONTROL.
*     按行读取或写出数据
      SELECT 文件别名 ASSIGN 源文件名 ORGANIZATION IS LINE SEQUENTIAL.
*     按位读取或写出数据
      SELECT 文件别名 ASSIGN 源文件名 ORGANIZATION IS      SEQUENTIAL.

*   IO控制
    IO-CONTROL.

9.4 数据部(DATA DIVISION)

* 数据部
DATA DIVISION.
* 文件节(用于定义文件结构)
  FILE SECTION.
*   按行读类型数据
    FD 数据名 RECORD 行长度 CHARACTERS.
    01 行名 PIC 数据类型(长度).

*   按位读类型数据
    FD 数据名 RECORD 行长度 CHARACTERS.
    01 行名.
      03 行名-DATA PIC 数据类型(长度).
      03 行名-CRLF PIC X(2).

* 工作单元节
  WORKING-STORAGE SECTION.
*   孤立数据项目
    77 单项目 PIC 类型.
*   判断初始值
    77 判断项目 PIC 类型 VALUE 0.
*     判断结果值
      88 判断结果 VALUE 9.
*   组合项目,以01~49数字开头
    01 组合项目.
      03 组合项目1 PIC 类型.
      03 子组合项目.
        05 子组合项目1 PIC 类型.
    
* 本地存储节(每次程序开始都会初始化)
  LOCAL-STORAGE SECTION.

* 连接节(外部数据接收数据名称)
  LINKAGE SECTION.

9.5 过程部(PROCEDURE DIVISION)

* 过程部
PROCEDURE DIVISION.

MAIN-RTN.
  ...
  PERFORM PRO1-RTN.
* 整个程序结束
  STOP RUN.
MAIN-EXT.
  EXIT.

PRO1-RTN.
  ...
PRO1-EXT.
  EXIT.

9.6 其他

9.6.1 字符集

coble识别:0-9 a-z A-Z +-*/,.$;'()<>:'=空格(78个字符和空格)

9.6.2 代码格式

标识区(1-6)

换行区(7)

A区(8-11)

B区(12-72)

注释区(73-80)

9.6.3 命名规范

数据命名 1-30个字符(只能是字母数字连接符)

9.6.4 开发工具

gnucobol工具

cobol2002保存文件自动编号

vscode可以编写代码。

9.6.5 编译命令

编译命令,cobc -x xxx.cob

执行命令,./xxx

编译执行,cobc -x xxx.cob && ./xxx

更多推荐

14:00面试,14:06就出来了,问的问题有点变态。。。

从小厂出来,没想到在另一家公司又寄了。到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到5月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%,这下搞的饭都吃不起了。还在有个朋友内推我去了一家互联网公司,兴冲冲见面试官,没想到一道题把我给问死了:如果模块请求http改为了h

每日练习-7

目录一、选择题二、算法题1、两种排序方法2、求最小公倍数一、选择题1、解析:指针和引用是C++中两种不同的变量类型,它们都可以用来访问或修改其他变量的值,但是它们有以下几个区别:引用必须在定义时初始化,而指针可以在任何时候初始化。例如,int&r=a;是合法的,但是int&r;是不合法的。而int*p;和int*p=&

02_elasticsearch 核心概念

02_elasticsearch核心概念1、lucene和elasticsearch的前世今生2、elasticsearch的核心概念1、lucene和elasticsearch的前世今生1、lucene和elasticsearch的前世今生lucene:最先进、功能最强大的搜索库。但是直接基于lucene开发,非常复

【Vue】模板语法,插值、指令、过滤器、计算属性及监听属性(内含面试题及毕设等实用案例)上篇

一、引言1、什么是模板语法?Vue的模板语法是一种用于在HTML中声明式地渲染Vue组件的语法。它基于HTML,并通过特定的模板语法扩展了HTML。Vue使用了一种称为“Mustache”语法的模板插值来绑定数据到HTML元素上。在Vue的模板语法中,你可以使用双大括号({{}})将数据绑定到HTML元素上,这样数据的

隔山打牛:金融大崩溃

当2004-2006年美联储主席格林斯潘在任期的末尾一鼓作气把联邦利率从1%拉高到5%,然后把美联储主席的位子交给继任者伯南克的时候,没有人意识到接下来将要发生何等巨变。图:美国联邦利率伯南克把利率稳定在5.3%附近的高位一年左右时间,直到2007年年中。美股从2003年底开始的牛市,一直狂飙到2007年底。标普500

【数据仓库设计基础1】关系数据模型理论与数据仓库Inmon方法论

文章目录一.关系数据模型中的结构1.关系2.属性3.属性域4.元组5.关系数据库6.关系表的属性7.关系数据模型中的键二.关系完整性1.空值(NULL)2.关系完整性规则3.业务规则4.关系数据库语言三.规范化四.关系数据模型与数据仓库关系模型被广泛应用于数据处理和数据存储,尤其是在数据库领域,现在主流的数据库管理系统

HTML5的新特性有哪些?

HTML5是近年来Web开发标准最巨大的飞跃。与以前的版本不同,HTML5并非仅仅用来表示Web内容,它的新使命是将Web带入一个成熟的应用平台,在HTML5平台上,视频、音频、图像、动画,以及同计算机的交互都被标准化。HTML5在以前浏览器发展的基础上对标记进行了简化。另外,HTML5中对标记从语法上也进行了分类。(

nextTick 解析

🎬岸边的风:个人主页🔥个人专栏:《VUE》《javaScript》⛺️生活的理想,就是为了理想的生活!目录JS执行机制#运行机制nextTickqueueJobandqueuePostFlushCbqueueFlushflushJobs为什么要nextTick总结看完是不是有一堆问号?我们从中找出来产生问号的关键词

详细解释HiveSQL执行计划

一、前言HiveSQL的执行计划描述SQL实际执行的整体轮廓,通过执行计划能了解SQL程序在转换成相应计算引擎的执行逻辑,掌握了执行逻辑也就能更好地把握程序出现的瓶颈点,从而能够实现更有针对性的优化。此外还能帮助开发者识别看似等价的SQL其实是不等价的,看似不等价的SQL其实是等价的SQL。可以说执行计划是打开SQL优

分布式任务处理

1.分布式任务调度对一个视频的转码可以理解为一个任务的执行,如果视频的数量比较多,如何去高效处理一批任务呢?1、多线程多线程是充分利用单机的资源。2、分布式加多线程充分利用多台计算机,每台计算机使用多线程处理。方案2可扩展性更强。方案2是一种分布式任务调度的处理方案。什么是分布式任务调度?我们可以先思考一下下面业务场景

排序(希尔、快速、归并排序)

文章目录1.排序的概念及其运用2.插入排序3.选择排序文章内容1.排序的概念及其运用1.1排序的概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i

热文推荐