cobol的语法与文法_第1页
cobol的语法与文法_第2页
cobol的语法与文法_第3页
cobol的语法与文法_第4页
cobol的语法与文法_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

cobol的语法与文法REDEFINES

可以用不同的变量描述同一内存。

01PART_RECODEUSAGEDISPLAY

03PART-TYPEPICTURE...

03PART_TYPE_A.

05PART_NUMBERPICTURE...

05PART_COSTPICTURE...

03PART_TYPE_BREDEFINESPART_TYPE_A.

05UPC_CODEPICTURE...

03PART_TYPE_CREDEFINESPART_TYPE_A.

05ISBNPICTURE...

根据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.

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例子:

03VARPICAAAAA.

STATE变量长度为5个字符,不能有数字,等价于03STATEPICA(5)。

输入ASDFG,显示ASDFG

03VARPICXXXXX.

FILLER变量长度为5个任意字符。等价于03FILLERPICX(5)。

输入123AS,显示123AS

03VARPIC99/XXX/9999长度11,输入05may2004,显示05/may/2004

03VARPIC0ABXXX/9999长度11,输入05may2004,显示05may/2004

03VARPIC9(3)长度3,0~999之间。

03VARPIC9(4)V99长度6,0.00~9999.99之间。

03VARPICS9(5)V99长度7,-99999.99~99999.99之间。

03VARPIC9(6)PPP长度6,可以是1000,2000,...,999999000。输入1234,显示1000。

03VARPICPPP999长度3,0.000001~0.000999之间。输入123,显示0.000123。

03VARPICZZZ.99,输入100.50,显示100.50;输入-51.50,显示51.50;

输入0,显示.00.

03VARPIC$ZZZ.ZZ-,输入100.50,显示$100.50;输入-51.50,显示$51.50-;

输入0,显示

03VARPIC$***,***.99CR,输入1000,显示$**1000.00;输入-1000,显示$**1000.00CR;

输入0,显示$***,***.00;输入51.5,显示$***,*51.50

03VARPIC$$$,$$$.99,输入100.50,显示$100.50;输入-100.50,显示$100.50;

输入0.777,显示$.77;输入0,显示$.00

03VARPIC$.$$$,输入1.00,显示$.00;输入0.65,显示$.65;

输入0,显示$.00;

03VARPIC$--,输入17.7,显示$17;输入-17.7,显示$-17;

输入-5,显示$-5

03VARPIC$999.99+,输入100.50,显示$100.50+;输入-100.50,显示$100.50-;

03VARPIC9(3)B9(3),输入55,显示000055;输入1000.78,显示001000;USAGE表示基本或组数据的类型。有BINARY,COMPUTATIONAL(COMP),DISPLAY,INDEX,PACKED-DECIMAL.

JUSTIFIED

03VAR1PICX(5)JUSTIFIEDRIGHT.

03VAR2PICX(5).

输入XYZ,VAR1显示的是"

XYZ",VAR2显示的是"XYZ

"。

BLANKWHENZERO

03VARPIC$999,999.99BLANKWHENZERO.

当字段值为0,这个项目设置为全部空格。

VALUE

定义的时候就赋值。

03VARPICX(5)VALUE"ABCDE".

01VARVALUEALLSPACES.

03VAR1PICXXX.

03VAR2PICXX.

算术语句

COBOL中操作符执行顺序为:取正(+)、取负(-)最高级,指数操作(**)其次,乘(*)、除(/)再其次,加(+)、减(-)最后。ROUNDED

舍入操作。

77APIC9V9VALUE9.1.

77BPIC9.

ADD0.5TOAGIVINGBONSIZEERRORGOTOPROC1.

ADD0.5TOAGIVINGBROUNDEDONSIZEERRORGOTOPROC2.

END-ADD.ONSIZEERROR是当语句出现错误时执行的。本例中第一句话执行没有错误,所以ONSIZEERROR不执行PROC1.第二句话,当0.5加上9.1得到9.6,因为有ROUNDED,所以执行舍入操作,得到10。而B只有1位数字,所以发生错误,执行ONSIZEERROR操作,跳转执行PROC2。

CORRESPONDING(CORR)数据项同名时编写多条语句。ADD和SUBSTRACT有此选项。

01A.

03B.

05B1PIC999V99.

05B1PIC999V99.

05B1PIC999V99.

03C.

05B1PIC999V99.

05B1PIC999V99.

05B1PIC999V99.则语句ADDCORRBTOC.相当于执行了下面3条语句。

ADDB1OFBTOB1OFC.

ADDB2OFBTOB2OFC.

ADDB3OFBTOB3OFC.组项目不一定要格式相同。一个组项目中的内容在另一个组项目中可以没有,数据项顺序也无关紧要。只是严格按照数据项名称对应。

ADDA,BGIVINGC.END-ADD.

将A,B相加放入C。

SUBTRACTA,BFROMC。END-SUBTRACT.

从C中减去A,B.

MULTIPLYABYBGIVINGC.END-MULTIPLY.将A,B相乘放入C。

DIVIDEAINTOBGIVINGC.END-DIVIDE.

将B除于A的结果放入C.

DIVIDEABYBGIVINGC.END-DIVIDE.

将A除于B的结果放入C.

DIVIDEABYBGIVINGCREMAINDERD.

将A除于B的商放入C,余数放入D.

D=A-B*C.

77CPICS99V9.

77DPICS99V9.

DIVIDE3INTO7GIVINGCREMAINDERD.

C的值为2.3,D为0.1。(D=7-3*2.3)COMPUTE

除了取余操作要用DIVIDE外,其他操作都可以用此语句。本语句求值一个算术表达式,并将结果存放在一个或几个变量中。COMPUTE

AROUNDED,B

=X*Y/(N+M)+Z.将X*Y/(N+M)+Z的结果存放在B中,然后舍入后放入A中。

MOVE

MOVEATOB.

也可以用CORR选项。

MOVECORRATOB.

ACCEPT

从键盘或其他输入设备读取数据。

ACCEPTAFROMDEV.

从DEV读取数据到A,也可以省略FROMDEV,表示从键盘读取。

ACCEPTAFROMDATE/DAY/DAY-OF-WEEK/TIME.读取日期,表示为6个字符,如990909(1999年9月9日)。

读取当前日期在年度(前2位)中为第几天(后3位),表示为6个字符,如1994年4月1日表示为94091。

读取当前星期几,表示为1位字符。1表示星期一,7表示星期日。

读取当前时间,表示为8位字符。精确到毫秒。如下午2:41表示为14410000。

DISPLAY

将数据写入输出设备。如监视器(monite),系统输出流和操作员控制台(console)。

DISPLAYAAAAABBBBB[UPONDEV][WITHNOADVANCING]

如果使用UPON选项,dev要与special-names段中的硬件名相关联。

如果使用noadvancing选项,则输出最后一个字符后输出设备仍然保持原位,使下一条display语句还在该位置显示。否则可能到下一行显示。

INITIALIZE

初始化数据,数字和数字编辑数据项初始化为0,其他初始化为空格。INSPECTTALLYING

计算项目中该字符串出现的次数。

INSPECTAATALLYINGBBFORALL“EE”.

从AA中查找有多少个EE,将个数写入BB。

INSPECTAATALLYINGBBFORCHARACTERSBEFORE“E”.

从AA中查找E前面有多少个字符,将个数写入BB。

INSPECTAATALLYINGBBFORCHARACTERSAFTER“C”BEFORE“E”.

从AA中查找C后面E前面有多少个字符,将个数写入BB。

INSPECTAATALLYINGBBFORLEADING“E”.

从AA中第一个字符开始查找有多少个E,如果没有就结束操作,有就将个数写入BB,直至没有。

INSPECTAATALLYINGBBFORLEADING“E”AFTER“C”.

从AA中C后面开始查找有多少个E,如果没有就结束操作,有就将个数写入BB,直至没有。组合例子:

77CSPICX(9)VALUE"REELWHEEL".

77COUNT-0.

77COUNT-1.

77COUNT-2.

MOVE0TOCOUNT-0,COUNT-1,COUNT-2.

INSPECTCSTALLYING

COUNT-0FORALL"E",

COUNT-1FORLEADING"W"AFTER"L",

COUNT-2FORCHARACTERS.

程序首先判断的是字符"R",执行COUNT-0FORALL"E",因为第一个字符不是"E",所以程序转而执行COUNT-1FORLEADING"W"AFTER"L",也不符合要求,

于是程序执行COUNT-2FORCHARACTERS,COUNT-2=1。然后字符串往下一位,判断"E",执行COUNT-0FORALL"E",符合要求,则COUNT-0=1。

有了满足条件的判断,则余下的判断不再执行,字符串再往下一位,判断"E",则COUNT-0=2。接着判断"L",则COUNT-2=2。以此类推,最后结果为COUNT-0=4,

COUNT-1=1,COUNT-2=4。INSPECTREPLACING

用另一个字符串替换这个字符串。

还用上面的例子。

INSPECTCSREPLACINGALL"E"BY"Y".

结果"RYYLWHYYL"

INSPECTCSREPLACINGCHARACTERSBY"Z"AFTER

"L".

结果"REELZZZZZ"

INSPECTCSREPLACINGLEADING"E"BY"Y".

结果不变

INSPECTCSREPLACINGLEADING"E"BY"Z"AFTER

"H".

结果"REELWHZZL"

INSPECTCSREPLACINGFIRST"E"BY"I".

结果"RIELWHEEL"

INSPECTCSREPLACINGFIRST"EE"BY"00",ALL"WH"BY"TH",CHARACTERSBYSPACE.

结果"00TH

"INSPECTCONVERTING

就是INSPECTREPLACING的缩写。

INSPECTCSCONVERTING"EE"TO"00".也可以加上BEFORE,AFTER。STRING

将几个字符串合并成一个字符串。

STRINGADELIMITEDBYSPACE,"!"DELIMITEDBYSIZEINTOC.假设A中的内容是"HELLO",则结果是"HELLO!".

DELIMITEDBYSPACE意思是碰到空格,或到A的结尾或C的结尾,则合并A字符串结束。

DELIMITEDBYSIZE意思是到"!"的结尾或C的结尾,则合并"!"字符串结束。

STRINGAINTOBPOINTERCONOVERFLOWPROC1NOTONOVERFLOW

PROC2.

将A字符串复制到B中由C开始的地址处。如果C小于1或大于B的长度,或A的长度大于B中C到结尾处的长度,则发生

OVERFLOW溢出,执行PROC1。

UNSTRING

将一个字符串中的字符按照要求放入多个变量中。

UNSTRINGAAA[DELIMITEDBY[ALL]B[OR[ALL]C]...]INTO{C[DELIMITERIND][COUNTINE]}...[WITHPOINTERF][TALLYINGING][ONOVERFLOWPROC1][NOTONOVERFLOWPROC2][END-UNSTRING]

将AAA中的字符放入C,如果还有其他变量,如C2,则等C放满后放入C2。

DELIMITEDBY和STRING中的作用一样。表示将AAA中到B为止的字符取出。如果有OR,则表示到B或C字符为止的字符取出。如果有ALL,则如果几个相同的B在一起,则认为是一个B。

DELIMITERIN将B放入D,知道是哪个字符为分隔符。

COUNTIN实际复制到C中的字符数放入E中。

WITHPOINTER和STRIGN中一样。

TALLYINGIN计算有几个接受项。访问一个新的接受项,G值加1。例子:

03CITYPICX(10).

O3ZIP

PICX(10).

77TESTPICX(20).

MOVE"NEWYORK,

UNSTRINGTESTDELIMITEDBY","INTOCITY,ZIP.

执行结果CITY值是NEWYORK.ZIP的值是NY10017。

逻辑和控制语句

IF(A[NOT]>B)等价于IF(A[NOT]GREATERTHANB)

IF(A[NOT]<B)等价于IF(A[NOT]LESSTHANB)

IF(A[NOT]=B)等价于IF(A[NOT]EQUALTOB)

IF(A>=B)等价于IF(AGREATERTHANOREQUALTOB)

IF(A<=B)等价于IF(ALESSTHANOREQUALTOB)

IFAIS[NOT]NUMERIC

数字和可选符号

IFAIS[NOT]ALPHABETICA~Z,a~z字符和空格

IFAIS[NOT]ALPHABETIC-LOWERa~z字符和空格

IFAIS[NOT]ALPHABETIC-UPPERA~Z字符和空格

IFAIS[NOT]CLASS-NAME

SPECIAL-NAMES定义的字符集

例如:SPECIAL-NAMES.

CLASSMYDEFINEIS"12345+ABCDE-".

判断变量是否定义了数值。这个变量是88层的,且要与一个数据项关联。

03STATEPICXX.

88CONVALUESARE"A","B","C".

IFCON...

判断厂家定义运行开关的开/关状态。

SPECIAL-NAMES.

SWITCH-AONSTATUSISA-ON,OFFSTATUSISA-OFF.

IFA-ON...

若开关在开位置,则IFA-ON返回TRUE。

IFAIS[NOT]POSITIVE

判断是否大于0

IFAIS[NOT]NEGATIVE

判断是否小于0

IFAIS[NOT]ZERO

判断是否等于0PERFORM

过程调用,但是不传递参数。

PERFORMPROC1[THROUGHPROC2]

执行完PROC1再执行PROC2.没有THROUGH(THRU)就只执行PROC1.

PERFORMPROC1[THRUPROC2]NTIMES

执行PROC1[或者还有PROC2]N次。

PERFORMPROC1[THRUPROC2][WITHTESTBEFORE/AFTER]UNTILANOTEUQAL0.

执行PROC1[或者还有PROC2]直到A不等于0。WITHTESTBEFORE/AFTER指定在第一次执行之前还是之后判断条件。默认是BEFORE,执行之前判断。

PERFORMPROC1[THRUPROC2][WITHTESTBEFORE/AFTER]VARYINGAFROMBBYCUNTILCONDITION1[AFTERDFROMEBYFUNTILCONDITION2].

相当于FOR循环,将A的值从B开始,以C为单位递增,直到满足CONDITION1。AFTER语句是一个嵌套的FOR循环。VARYING是外循环,AFTER是内循环。A,B可以是索引。

过程也可以直接写入PERFORM中。但是THROUGH就不好用了。语法如下:

PERFORM过程语句END-PERFORM.

PERFORMNTIMES过程语句END-PERFORM.

PERFORM[WITHTESTBEFORE/AFTER]UNTILCONDITION过程语句END-PERFORM.

PERFORM[WITHTESTBEFORE/AFTER]VARYINGAFROMBBYCUNTILCONDITION1过程语句END-PERFORM.

IF语句

IFCONDITIONTHENSTATEMENTS1/NEXTSENTENCEELSESTAT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论