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


    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 不同类型传送

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

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

    (3) 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

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

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

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

    2. 运算符

    2.1 算术运算

    2.1.1 加算

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

    (2) 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

    1. MAIN-RTN.
    2. //1
    3. PERFORM FOR1-RTN THRU FOR1-END.
    4. //3
    5. PERFORM FOR2-RTN.
    6. PERFORM STOP-RTN.
    7. MAIN-EXT.
    8. FOR1-RTN
    9. //2
    10. GO TO FOR1-END.
    11. FOR1-END.
    12. EXIT.
    13. FOR2-RTN.
    14. //4
    15. GO TO FOR2-END.
    16. FOR2-END.
    17. EXIT.
    18. STOP-RTN.
    19. //5
    20. STOP RUN.
    21. STOP-END.
    22. EXIT

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

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

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

    (2) 内PERFROM

    1. PRO-RTN.
    2. 处理...
    3. PERFORM
    4. 处理...
    5. END-PERFORM.
    6. 处理...
    7. PRO-EXT.
    8. EXIT.

    注释:内PERFORM主要用于循环

    3.2.2 PERFORM UNTIL

    (1) UNTIL终止循环方式

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

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

    1. 77 RTN-S PIC 9 VALUE 0.
    2. 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 循环嵌套

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

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

    4. 调子程序(CALL)

    外部文件

    1. PROGRAM-ID xxx001
    2. DATA DIVISION.
    3. LINKAGE SECTION.
    4. 01 数据 PIC 9.
    5. 01 数据 PIC 9.
    6. PROCEDUE DIVISION [USING 数据1, 数据2]
    7. 处理...
    8. EXIT PROGRAM.

    自身文件

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

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

    (2) BY CONTENT 值传递

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

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

    5.1 复写(COPY)

    5.1.1 外部数据文件

    1. 01 A
    2. 03 AA
    3. 05 A1 PIC 9.
    4. 05 A2 PIC 9.
    5. 05 A3 PIC 9.

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

    5.1.2 外部过程文件

    1. 子过程-S
    2. 处理...
    3. 子过程-E
    4. EXIT.

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

    5.1.3 引用外部数据文件

    1. DATA DIVISION.
    2. COPY 外部数据文件名.
    3. COPY 玩不数据文件名 REPLACINT 别名-.
    4. PROCEDUE DIVISION.
    5. MOVE A1 TO XX.
    6. MOVE 别名-A1 TO XX.

    5.1.4 引用外部过程文件

    1. PROCEDUE DIVISION.
    2. 过程...
    3. PERFORM 子过程-S.
    4. 过程...
    5. COPY 子过程文件名.

    5.2 重定义(REDEFINES)

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

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

    5.3 重命名(RENAME)

    1. 03 A
    2. 05 YEAR PIC 9(4).
    3. 05 MONTH PIC 9(2).
    4. 05 DAY PIC 9(2).
    5. 03 B
    6. 05 NAME PIC X(20).
    7. 05 AGE PIC 9(2).
    8. 66? C REANME A.?
    9. 66? D REANME DAY TO NAME.?

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

    5.4 输出(DISPLAY)

    1. DISPLAY XXX.
    2. DISPLAY 'abce'.
    3. 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].

    1. 01 OC1-TABLE.
    2. 03 ROW-T1 OCCURS 5 TIMES PIC 9(02).
    3. 03 ROW-T1 OCCURS 5 PIC 9(02).
    4. 01 OC2-TABLE.
    5. 03 ROW-T1 PIC 9(02) OCCURS 5 TIMES.
    6. 03 ROW-T1 PIC 9(02) OCCURS 5.

    6.1.2 多类型

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

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

    6.2 变长表

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

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

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

    6.3 表的初期化

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

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

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

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

    1. DATA DIVISION.
    2. 01 OC1-TABLE.
    3. 03 ROW-T1 OCCURS 5 TIMES PIC 9(02).
    4. 01 OC2-TABLE VALUE IS ZERO.
    5. 03 ROW-T2 OCCURS 5 PIC 9(02).
    6. 01 OCA-TABLE.
    7. 03 FILLER PIC X(20) VALUE ALL 'A'.
    8. 01 OC3-TABLE REDEFINES OCA-TABLE.
    9. 03 ROW-T3 OCCURS 3 TIMES.
    10. 07 T-YEAR PIC X(4).
    11. 01 OC4-TABLE.
    12. 03 ROW-T4 OCCURS 3 TIMES.
    13. 07 T-YYYY PIC X(04).
    14. PROCEDURE DIVISION.
    15. MAIN-RTN.
    16. INITIALIZE OC1-TABLE.
    17. MOVE ZERO TO IDX.
    18. PERFORM UNTIL IDX > 2
    19. INITIALIZE ROW-T4(IDX).
    20. ADD 1 TO IDX
    21. EDN-PERFORM.
    22. MAIN-EXT.
    23. EXIT.

    6.4 表元素取值

    6.4.1 引用元素本身

    MOVE 表名(下标) TO XX.   

    注释:下标从1开始

    6.4.2 不同表的相同属性

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

    7. 文件

    7.1 读文件(READ)

    7.1.1 环境部

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

    7.1.2 数据部(文件节)

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

    7.1.3 数据部(工作单元节)

    1. WORKING-STORAGE SECTION.
    2. // 方式1:内部数据结构定义
    3. 01 WREC.
    4. 031 PIC 9(1).
    5. 032 PIC 9(2).
    6. // 方式2:外部数据结构引入
    7. COPY 外部数据结构文件名 [REPLACING 别名].

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

    7.1.4 过程部

    1. OPEN INPUT 文件别名.
    2. READ 文件别名 INTO 别名-WREC // 读一行数据,给数据结构
    3. AT END // 当读不到数据,执行下一行代码
    4. MOVE 9 TO XX-STATUS // 将文件状态设置为9(为了判断终止)
    5. [GO TO END]
    6. END READ.
    7. IF 文件列名-CRLF = X'0D0A' // 判断换行符
    8. CONTINUE
    9. ELSE
    10. 异常处理
    11. END-IF.
    12. CLOSE 文件别名.

    7.2 写文件(WRITE)

    7.2.1 环境部

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

    7.2.2 数据部(文件节)

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

    7.2.3 数据部(工作单元节)

    1. WORKING-STORAGE SECTION.
    2. // 方式1:内部定义
    3. 01 WREC.
    4. 031 PIC 9(1).
    5. 032 PIC 9(2).
    6. // 方式2:外部引用
    7. COPY 外部文件名 [REPLACING 别名].

    7.2.4 过程部

    1. OPEN OUTPUT 文件别名.
    2. WRITE 文件行-REC FROM 别名-WREC.
    3. CLOSE 文件别名.

    8. DB

    8.1 外部数据模型

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

    8.2 外部SQL文件

    8.2.1 单条查询

    1. // 本地文件
    2. MOVE XX TO CODE1.
    3. // SQL文件
    4. EXEC SQL
    5. SELECT 项目1
    6. INTO :NAME,
    7. :AGE
    8. FROM 表名
    9. WHERE 项目2= :CODE1
    10. END-EXEC.

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

    8.2.2 多条查询

    1. // 定义打开游标
    2. CUR1-OPEN-RTN
    3. EXEC SQL DECLARE 游标名 CURSOR FOR
    4. SELECT 项目
    5. FROM 表名
    6. WHERE 项目2 = :CODE1
    7. END-EXEC.
    8. CUR1-OPEN-EXT.
    9. EXIT.
    10. // 定义游标赋值
    11. CUR1-FETCH-RTN.
    12. MOVE -1 TO NAMEI. // 初始化空项目判断项目
    13. EXEC SQL
    14. FETCH 游标名 INTO :NAME :NAMEI, AGE
    15. END-EXEC.
    16. IF NAME1 = -1 // 判断项目是否为空,数据库为NULL则不赋值
    17. MOVE LOW-VALUE TO NAME.
    18. CUR1-FETCH-EXT.
    19. EXIT.
    20. // 定义关闭游标
    21. CUR1-CLOSE-RTN.
    22. EXEC SQL CLOSE 游标名 END-EXEC.
    23. CUR1-CLOSE-EXT.
    24. EXIT.

    8.3 程序调用

    1. WORKING-STORAGE SECTION.
    2. ...
    3. EXEC SQL
    4. COPY 数据模型文件
    5. END-EXEC.
    6. PROCEDUE DIVISION.
    7. MAIN-RTN.
    8. * 打开游标
    9. PERFORM CUR1-OPEN-RTN THRU CUR1-OPEN-EXT.
    10. * 循环游标
    11. PERFORM CUR1-FETCH-RTN THRU CUR1-FETCH-EXT UNTIL XX.
    12. * 关闭游标
    13. PERFORM CUR1-CLOSE-RTN THRU CUR-CLOSE-EXT.
    14. MAIN-EXT.
    15. EXIT.
    16. XXX-XX SECTION. //自定义节
    17. EXEC SQL
    18. COPY SQL文件
    19. END-EXEC.

    8.4 插入

    1. XXX-INSERT-RTN.
    2. EXEC SQL
    3. INSERT INTO
    4. VALUES
    5. (:NAME,
    6. :AGE)
    7. END-EXEC.
    8. XXX-INSERT-EXT.
    9. EXIT.

    8.5 更新

    1. XXX-UPDATE-RTN.
    2. EXEC SQL
    3. UPDATE 表
    4. SET
    5. 项目名 = :NAME,
    6. 项目名 = :AGE
    7. WHERE 项目名 = :CODE1
    8. END-EXEC.
    9. XXX-UPDATE-EXT.
    10. EXIT.

    9. 文件结构

    9.1 程序结构

    1. * 标识部 必须 //定义作成者,时间等信息
    2. IDENTIFICATION DIVISION.
    3. ...
    4. * 环境部 //用于指定输入输出文件
    5. ENVIRONMENT DIVISION.
    6. ...
    7. * 数据部 // 用于定义变量,引入外部变量
    8. DATA DIVISION.
    9. ...
    10. * 过程部 // 用于写程序逻辑,引入外部过程
    11. PROCEDUE DIVISION.
    12. ...

    9.2 标识部(IDENTIFICATION DIVISION)

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

    9.3 环境部(ENVIRONMENT DIVISION)

    1. * 环境部
    2. ENVIRONMENT DIVISION.
    3. * 配置节 必须写 内有2个段
    4. CONFIGURATION SECTION.
    5. SOURCE-COMPUTER 源计算机(编译程序系统).
    6. OBJECT-COMPUTER 目标计算机(执行程序系统).
    7. * 输入输出节 有文件操作则必须写 内有2个段
    8. INPUT-OUTPUT SECTION.
    9. * 文件控制(提供程序中使用的外部数据)
    10. FILE-CONTROL.
    11. * 按行读取或写出数据
    12. SELECT 文件别名 ASSIGN 源文件名 ORGANIZATION IS LINE SEQUENTIAL.
    13. * 按位读取或写出数据
    14. SELECT 文件别名 ASSIGN 源文件名 ORGANIZATION IS SEQUENTIAL.
    15. * IO控制
    16. IO-CONTROL.

    9.4 数据部(DATA DIVISION)

    1. * 数据部
    2. DATA DIVISION.
    3. * 文件节(用于定义文件结构)
    4. FILE SECTION.
    5. * 按行读类型数据
    6. FD 数据名 RECORD 行长度 CHARACTERS.
    7. 01 行名 PIC 数据类型(长度).
    8. * 按位读类型数据
    9. FD 数据名 RECORD 行长度 CHARACTERS.
    10. 01 行名.
    11. 03 行名-DATA PIC 数据类型(长度).
    12. 03 行名-CRLF PIC X(2).
    13. * 工作单元节
    14. WORKING-STORAGE SECTION.
    15. * 孤立数据项目
    16. 77 单项目 PIC 类型.
    17. * 判断初始值
    18. 77 判断项目 PIC 类型 VALUE 0.
    19. * 判断结果值
    20. 88 判断结果 VALUE 9.
    21. * 组合项目,以01~49数字开头
    22. 01 组合项目.
    23. 03 组合项目1 PIC 类型.
    24. 03 子组合项目.
    25. 05 子组合项目1 PIC 类型.
    26. * 本地存储节(每次程序开始都会初始化)
    27. LOCAL-STORAGE SECTION.
    28. * 连接节(外部数据接收数据名称)
    29. LINKAGE SECTION.

    注释:77层变量,可以直接 set 变量名 to true; 将88层设置为真值

    9.5 过程部(PROCEDURE DIVISION)

    1. * 过程部
    2. PROCEDURE DIVISION.
    3. MAIN-RTN.
    4. ...
    5. PERFORM PRO1-RTN.
    6. * 整个程序结束
    7. STOP RUN.
    8. MAIN-EXT.
    9. EXIT.
    10. PRO1-RTN.
    11. ...
    12. PRO1-EXT.
    13. 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可以编写代码。

  • 相关阅读:
    前端面试基础题——12
    【20221201】【每日一题】划分字母区间
    static关键字总结-C/C++
    内网穿透,轻松实现PostgreSQL数据库公网远程连接!
    Java调用matlab
    GPT学习-使用embedding做回归(regression)预测
    Spring5入门到实战------15、事务操作---概念--场景---声明式事务管理---事务参数--注解方式---xml方式
    LeetCode每日一题:1488. 避免洪水泛滥(2023.10.13 C++)
    【iOS开发】——Category底层原理、Extension、关联对象
    基于SSM的个人相册管理系统
  • 原文地址:https://blog.csdn.net/m0_65939803/article/details/132521749