COBOL基础 cobol从入门到精通

一:关键字
1.Filler
使用filler描述的数据,主要需要占用记录位置,但在程序中又不会用到的。
在定义数据时不指定任何数据名称,则系统默认按照filler的方式定义处理。
数据不能被引用,必须使用value从句对其赋初值。

2.REDEFINES对同一块内存区进行重定义,共享内存空间。
不能对66,88和文件节中的01层操作,可以对工作存储节的01层操作。
可以改变数据结构,但长度必须一致。
不能用VALUE赋初值。
如:WORKING-STORAGE SECTION.
01WEEK-VALUES.
05 FILLER PIC X(10) VALUES 'MONDAY'.
05PIC X(10) VALUES 'TUESDAY'.
01WEEK-TABLE-ONE REDEFINES WEEK-VALUES.
05 DAYS PIC X(10) OCCURS 7TIMES.
注意:必须同一层次(层号相同)
必须紧跟在重定义的数据项后面
多重定义时,必须连续定义,且用最初的数据名。
3.RENAME把原来已定义的某些数据项重新组合成一个新项,并以一个新名字来代表它
不改变各初等项的类型和长度。
只用于工作单元节,且必须使用66层号。
如:WORKING-STORAGE SECTION.
01WEEK-VALUES.
05 MON PIC X(10) VALUES 'MONDAY'.
10 MOR PIC X(10) VALUES 'MORNING'.
10 AFT PIC X(10) VLUES 'ATTERNOON'.
05 TUE PIC X(10) VALUES 'TUESDAY'.
66WEEK-TABLE-ONE RENAME MON.
66WEEK-TABLE-ONE RENAME MOR THRU TUE.

二:数据类型
1.变量和常量
如:01 VAR PIC X(N). 数据可以被修改。
01 RATE PIC9V99 VALUE 3.14. 数据不能被修改。

象征常量:
ZERO(S) -- 全0, SPACE(S) -- 全空。
HIGH-VALUE(S),LOW-VALUE(S) -- 二进制代码全部为1,0。
如:用于清空数据,MOVE LOW-VALUES TO VAR.
01 WK-TEST.
05 WK-TEST-X PIC X(4).
05 WK-TEST-P PIC 9(4) COMP-3.
05 WK-TEST-9 PIC 9(4)
MOVE ZERO TO WK-TET-X. (适用于X型,数字型和数字编辑型是违法的)
程序中的初始化。
INITIALIZE WK-TEST.
数字和数字编辑数据初始化为0,其他初始化为空格.
ALL -- 数据组成字符串。
如:01 TEST-DA PIC X(8).
MOVE 'ABC'TO TEST-DA.
则TEST-DA为'ABCABCAB'.

单引号,双引号通用。

COBOL基础 cobol从入门到精通
2.字符型(X),整形(9或S9),浮点型(V或.),其中S和V不占存储空间。
当X和9同时出现,为字符型。
浮点型需加V定义,只是记录小数点位置,且不能打印出小数点,'.'则都可以。
如:01 F1 PIC 9V9.
01 F2 PIC9.9.
MOVE 123.45TO F1, F2.
输出:12345,123.45.
数值型正负需加S定义(如不,只能存储正数),S只是记录正负号,但不能打印。

格式输出类型--只能用于输出,不能用于计算。
借贷记:DB,CR.正数被空格取代,负数显示。
如:01 X PIC $9999CR.
01 Y PIC$9999DB.
MOVE 1024 TOX,Y.
输出:1024,1024.
MOVE -1024TO X,Y.
输出:1024CR,1024DB.

正负号:解决输出'+','-'问题。
符号可前可后,可定义多位,如'+++99',用法同'$'.
当为正数时,用'+'定义,输出'+',用'-'定义,输出空格。
当为负数时,用'+'定义,输出'-',用'-'定义,输出'-'。
如:01 BALANCE1 PIC 99+.
01 BALANCE2PIC -99.
MOVE 33 TOBANLANCE1,BANLANCE2.
MOVE -33 TOBANLANCE1,BANLANCE2.
输出:+33,33_,-33,-33.

逗号:解决数据位数太长问题。
小数点定义总被输出,分隔号只有超过三位才输出。
如:01 M1 PIC 99.99.
02 M2 PIC99,999.99.
03 M3 PIC9,99.99.
MOVE 0 TOM1.
MOVE 12.34TO M1.
MOVE12345,.67 TO M2.
MOVE 100 TOM3.
输出:0.00--==12.34--12,345.67--100.00

货币格式:$-占一个长度。
如:01 PRICE PIC $99.
MOVE 73 TOPRICE.
输出:$73.
如:01 NUM PIC 9999.
01 NUM1 PIC$$$$99.
01 NUM2 PIC$$99.
MOVE 1234 TONUM1,NUM2.
输出:$1234,$234.
规则:当存在多个$时,右对齐,至少且只能留一个$.注意:$占空间。

'Z'和'*'
'Z’用空格替换,'*'用自身替换,用于去除无效的零。
注意:定义的位数长度大于数据长度时,要输出多余符号。
如:01 PIC M1 ****。99.
02 PIC M2ZZZZ.99.
MOVE 0.05 TOM1,M2.
MOVE 6000 TOM1,M2.
输出:****.05--.05--6000.00--6000.00

日期格式:/
如:01 DATA PIC 9999/99/99.
MOVE20111231 TO DATA.
输出:2011/12/31.

'0'和'B'
用法同'/',直接替换输出。

三:数据处理
1.复制相同数据名时,则使用'IN'.
如:01 TESTXX.
05 TEST1 PIC XX.
05 TEST2 PIC 9.
01TESTYY.
05 TEST1 PIC XX.
05 TEST2 PIC 9.
MOVE TEST1IN TESTXX TO TEST2IN TESTYY.

2.复制规则
任何类型的数据都可以复制到字符型变量中。
数值型数据可以复制到任何类型变量中。

3.长度处理

同类型间的传送

字符型:左对齐原则,余位补空
如:01 SHORT-CHAR X(3).
01CHARX(5) VALUE 'ABCDE'.
01LONG-CHAR X(7).
MOVE CHAR TOSHORT-CHAR, LONG-CHAR.
DISPLAYSHORT-CHAR, LONG-CHAR.
输出:ABC,ABCDE.
数值型:右对齐原则,小数点(将数值看做浮点数)对其原则,余位补零
如:01NUM9(5) VALUE 12345.
01S-NUM9(3).
01L-NUM9(7).
01F-NUM9(3)V99.
01SF-NUM9(5)V9(3).
01LF-NUM99V9.
MOVE NUM TOS-NUM, L-NUM, F-NUM.
MOVE 123.45TO SF-NUM, LF-NUM.
各项内容如下:12345, 345, 0012345, 345.00, 00123.450, 23.4。

不同类型间传送

不合法传送
a. 数值编辑项,字符编辑项,SPACE,字母型数据项不能传送给数值型和数值编辑型数据项
b. 数值常量,ZERO,数值数据项,数值编辑项不能传送给字母数据项
c. 非整数的数值数据项或非整数的数值常量不能传送给字符型或字符编辑型数据项
合法传送
a. 接收项为字符或字符编辑型,发送项长于接收项,按左侧对齐原则
b. 接收项是数值或数值编辑型,可以接收数值型以及内容全是数字的字符型数据项
c. 接收项是字母型,可以接收字母型以及内容全是字母和空格的字符型数据项

组合项的传送(类似于字符型数据之间的传送)

组合项的传送是将发送项的内容不加转换地一个字节一个字节地顺序传送到接收项。

若发送项与接收项长度不同,则:左对齐,右补空格,多余位截去

结构和描述都相同时

01A.

05 A1 PIC X(3).

05 A2 PIC 9(4)V99.

05 A3PICA(4).

01B.

05 B1 PIC X(3).

05 B2 PIC 9(4)V99.

05 B3 PIC A(4).

MOVE A TO B.

A

B

A1

A2

A3

B1

B2

B3

A

B

C

8

7

5

3

1

2

D

E

F

G

A

B

C

8

7

5

3

1

2

D

E

F

G





























如果发送项和接收项长度相同,但结构形式不同,则将发送项的内容原样不变地自左向右传送到接收项

MOVE A TO B.

A

B

A1

A2

A3

A4

A5

B1

B2

B3

B21

B22

8

6

7

T

I

3

4

2

Z

H

A

N

G

C

-

D

8

6

7

T

I

3

4

2

Z

H

A

N

G

C

-

D



































如果传送时,发送项与接收项长度不同,按:左对齐,右补空格,多余位截去


对应传送

1)数据名受限和受限名的传送(类似于C语言中结构变量成员的访问)
所谓同名,指的是它们有相同的全程受限(全程同名)

01 SUM.01 TOTAL.

04 A1 PIC X(2). 04 A1 PIC X(4).

04 A2 PIC X(3).04 A3 PIC 9(5).

04 A3 PIC 9(4).04 B2 PIC 99V99.

MOVE A1 OF SUM TO T1.

MOVE A1 OF TOTAL TO T2.

01 SUM. 01 TOTAL.

03 A.03A.

04 A1 PIC X(2). 04 A1 PIC X(4).

04 A2 PIC X(3). 04A3 PIC 9(5).

04 A3 PIC 9(4). 04 A2 PIC 99V99.

MOVE A1OF A OF SUM TO T1.

MOVE A1 OF A OFTOTAL TO T2.

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

MOVE {CORRESPONDING, CORR} 标识符1TO 标识符2

只传同名的项,对于RENAMES,REDEFINES, OCCURS的数据项不予传送。

01 PAY-RECORD.01EDITTED-RECORD.

04 A1 PIC 9(4)V99.04 B3 PIC ZZZZ.99.

04 A2 PIC 9(4)V99.04 A2 PIC ZZZ9.99.

04 A3 PIC 9(3)V99.04 A1 PIC ZZZ9.99.

MOVE CORRPAY-RECORD TO EDITTED-RECORD.

相当于:

MOVE A1 OF PAY-RECORDTO A1 OFEDITED-RECORD.

MOVE A2 OF PAY-RECORD TOA2OFEDITED-RECORD.

01A.01 B.

05 A1 PIC X(3) VALUE ‘111’. 05 A2 PIC X(4)

05 A2 PIC X(4) VALUE ‘2222’. 05 A1 PIC X(3).

MOVE A TOB. 与 MOVE CORR A TO B. 不同

5.字符串处理
合并(STRING),拆分(UNSTRING),替换(INSPECT)
如:01F-NAMEPIC X(10) VALUE 'CHEN'.
01ADDPIC X(5) VALUE 'ADD'
01L-NAMEPIC X(10) VALUE 'GEORGE'.
01BALPIC 99.99 VALUE 100.23.
01DOCPIC X(1) VALUE '.'.
01FULL-NAME PIC X(50).
01LINE-NOPIC 9(5) VALUE 1.
01LINE-POINT PIC S9(4) VALUE 3.
STRING
LINE-NOSPACEDELIMITED BY SIZE.
F-NAMEDELIMITED BY SPACE(找到字符串第一个空格,只合并它之前的,SPACE可替换成任意变量)
ADDDELIMITED BY 'A'
''DELIMITED BY SIZE(所以字符串全部合并,一种特殊情况)
L-NAMEDELIMITED BY SPACE
SPACE 'OWNER' SPACE DELIMITED BY SIZE
BALDELIMITED BY DOC
INTOFULL-NAME WITH POINT POINT.
输出:001_CHEN_GANG_OWNER_100.
如:01INFOPIC X(50) VALUE '00001_324/CHEN-GANG_100.78.
01NOPIC X(10).
01STDLM1 PIC X(1).
01STDLM2 PIC X(1).
01LENPIC 99.
01STATPIC 99 VALUE 7.
01NUMPIC 99.
UNSTRINGINFO DELIMITED BY ALL SPACE OR '/' OR '.'
INTO
NODELIMITER IN STDLM1. (DELIMITER IN把拆分的分隔符保存到变量中)
F-NAMEDELIMITER IN STDLM2
COUNT INLEN.(计算拆分后的变量长度)
L-NAMEDELIMITER IN STDLM3.
COUNT IN LEN
WITHPOINTERSTAT (从第几位开始拆分)
TALLYINGINNUM(共拆分多少字符串)
ONOVERFOLW GO... (还没有拆分完全如何处理,调用另一过程)
拆分的字符串:NO--324,F--NAME-CHEN,L-NAME--GANG.
用到的变量值:STDLM1--'/',STDLM2--'-',STDLM3--'_',LEN--4,NUM--3.
如:01 VAR1 PIC X(10) VALUE 'AABCABCABC'.
01 COUNT PIC9(2)
02 VAR2PIC X(10) VALUE 'A2.CA-/DC6E'
INSPECTVAR1
REPLACINGALL 'A' BY'D'.(全部替换)
DISPLAYVAR1.----'DDBCDBCDBC'
INSPECTVAR1
REPLACING LEADING 'A' BY'D'(替换前缀)
TALLYING COUNT FOR LEADING 'A'.(计算个数) COUNT=2.
DISPLAYVAR1.----'DDBCABCABC'
INSPECTVAR1
REPLACING FIRST 'A' BY'$'(替换第一个)
DISPLAYVAR1.----'DABCABCABC'
INSPECTVAR2
REPLACING 'C' BY 'G' AFTERINITIAL '/'(之后的替换)
DISPLAYVAR2.----'A2.CA-/DG6E'
INSPECTVAR2
CONVERTING 'ABCDE'TO '12345' (全部对应替换)
BEFORE INITIAL '6'.
DISPLAYVAR2.----'12.31-/436E'

转换(FUNCTION),只是转换,不改变变量类型。如果输出结果,要MOVE到另一变量。
如:01 VAR1 PIC X(5) VALUE 'AbCde'.
01 VAR2 PICX(5) VALUE '-12.89'.
01 VAR3 PICX(10) VALUE '$35.67DB'
01A PICX(10).
DISPLAYFUNCTIONLOWER-CASE(VAR1).(转换大小写)
COMPUTERRESULT = FUNCTION NUMVAL(VAR2)+ 100.(转换成数值型可用于计算,正负号不影响)
MOVE RESULTTO A.
DISPLAYRESULT.
COMPUTERRUSULT = FUNCTION NUMVALC(VAR3)+ 50.67.(NUMVALC为扩展,可转化特殊字符,如'$',',')
MOVE RESULTTO A.
输出:'abcde','81.11','15'.

最大最小(MAX,MIN),按字母顺序和数值大小比较,任何字母大于空格。
如:MAX ('ABCD', 'CDEF') TO MAX-STR.
则MAX-STR值为’ABCD'。

长度(FUNCTION LENGTH,LENGTH OF),两种格式。
如:COMPUTE LEN = FUNCTIONLENGTH('ABC').(只转换)
DISPLAYLEN.
DISPLAYLENGTHOF 'ABC'。(转换并可用于输出)

子字符串(:)
如:01 DAY PIC X(2).
01 DATE PICX(10).
MOVE'2011/12/31' TO DATE.
MOVEDATE(9:2) TODAY.
DISPLAYDAY.
输出:31.

四.基本运算--算术运算,关系运算,逻辑运算
算术运算,都可以用COMPUTER和直接算术运算符号运算。
四舍五入:ROUNDED,对第一位小数点操作,结果为整数。
溢出:当定义位数溢出时,用ON SIZEERROR语句处理。
顺序:先乘方,再乘除,再加减。
加减乘除两种方式:包含/不包含GIVING。
结果:不包含GIVING语句,保存在后面的数中(DIVIDEBY语句保存在前面的数中)
乘方比较特殊,必须用COMPUTER操作。
如:01 A PIC 99V9 VALUE 10.3.
01 B PIC 99VALUE 20.
01 C PIC 99VALUE 30.
01 D PIC 99VALUE 90.
01 RESULT1PIC 99.
01 RESULT2PIC 999.
01BASE PIC 9VALUE 2.
01LEFT PIC99.
MOVE 0 TORESULT1.
ADD A TO RESULT1.
ADD A TO BGIVING RESULT1.
ADD A TO BGIVING RESULT1 ROUNDED.
ADD B TO DGIVING RESULT1
ON SIZE ERROR DISPLAY 'OVER FLOW'.
SUBTRACT B C FROM D.
SUBTRACT B CFORM D GIVING RESULT1.
MULTIPLY B BY C.
MULTIPLY BBY C GIVING RESULT1.
DIVIDE B INTO D.
DIVIDE BBYD.
DIVIDE D BYB REMAINDER LEFT.
COMPUTERRESULT2 = B **BASE.
算术统计运算--当对表操作时,要加上ALL。
三种:总和,中位数,平均数。
如:01 A PIC 9 VALUE 3.
01 B PIC 9VALUE 4.
01 C PIC 9VALUE 5.
01 SUM PIC9.
01 MID PIC9.
01 AVG PIC9.
COMPUTERSUM = FUNCTION SUM(A BC).
END-COMPUTER.
COMPUTERMID = FUNCTION MEDIAN(A BC).
END-COMPUTER.
COMPUTERAVG = FUNCTION MEAN(A BC).
END-COMPUTER.

关系运算(=,>, <, >=,<=),共五种,
对应(EQUAL TO, GREATER THAN, LESS TAN, GREATER THAN OR EQUAL TO,...)
结果只有两种,真或假,常用于流程控制当中。
只能同类型比较,不能将字母和数字比较。

逻辑运算:AND,OR,NOT三种,建立在关系运算基础上,用于流程控制中。
省略情况:IF TEST-NUM > 8 OR TEST-NUM = 10.
IF TEST-NUM > 8 OR = 10.
IF TEST-NUM = 8 OR TEST-NUM = 10.
IF TEST-NUM = 8 OR 10.
IF TEST-NUM NOT = 8 OR = 10.
IF TEST-NUM NOT = 8 OR TEST-NUM = 10.(要注意,不同于上面)。

五:流程控制--顺序,选择,循环。
1.顺序
2.选择(IF和EVALUATE,经常结合88层条件使用)。
常使用ZERO代替0和'0'。
IF COND
THEN
...
ELSE
...
END-IF (ELSE语句可为空)
EVALUATE TRUE
WHEN INPUT = 1.
...
WHEN INPUT = 2.
...
WHEN OTHER
...
END-EVALUATE.
使用88层简化
如:01 INPUT PIC 9.
88 MONDAY VALUE 1.
88 ...
99 SUNDAY VALUE 7.
EVALUATE INPUT
WHEN 1.
...
WHEN 2.
...
WHEN OTHER
...
END-EVALUATE.
3.循环结构。
PERFORM 100-READ-TATAL
UNTIL I >100.
DISPLAY ....
第二种为线上PERFORM,所有的处理在语句内了,处理较简单的情况。
PERFORM
UNTIL I >100.
100-READ-TOTAL
END-PERFORM(注意此处必须有END-PERFORM).

六:文件相关
1.ACCEPT, DISPLAY.
2.OPEN, CLOSE, READ, WRITE.(后续)

  

爱华网本文地址 » http://www.413yy.cn/a/25101017/335415.html

更多阅读

Ansys有限元分析-ansys13.0从入门到实战 有限元分析软件ansys

如何快速高效的学习ANSYS??很多人都有疑问,why?相对于其他应用型软件而言,ANSYS作为大型权威性的有限元分析软件,对提高解决问题的能力是一个全面的锻炼过程,是一门相当难学的软件,因而,要学好ANSYS,对学习者就提出了很高的要求ansys13.0从入

声明:《COBOL基础 cobol从入门到精通》为网友有暗香盈袖分享!如侵犯到您的合法权益请联系我们删除