cobol的語(yǔ)法與文法_第1頁(yè)
cobol的語(yǔ)法與文法_第2頁(yè)
cobol的語(yǔ)法與文法_第3頁(yè)
cobol的語(yǔ)法與文法_第4頁(yè)
cobol的語(yǔ)法與文法_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

cobol的語(yǔ)法與文法REDEFINES

可以用不同的變量描述同一內(nèi)存。

01PART_RECODEUSAGEDISPLAY

03PART-TYPEPICTURE...

03PART_TYPE_A.

05PART_NUMBERPICTURE...

05PART_COSTPICTURE...

03PART_TYPE_BREDEFINESPART_TYPE_A.

05UPC_CODEPICTURE...

03PART_TYPE_CREDEFINESPART_TYPE_A.

05ISBNPICTURE...

根據(jù)PART_TYPE決定用PART_TYPE_A還是PART_TYPE_B還是PART_TYPE_C。

規(guī)則:

PART_TYPE_B和PART_TYPE_C長(zhǎng)度不能大于PART_TYPE_A。

數(shù)據(jù)項(xiàng)不能有VALUE。

01層不能用REDEFINES.

PART_TYPE_B和PART_TYPE_C中不能有OCCURS.

PICTURE

定義基本項(xiàng)目的具體長(zhǎng)度,格式,數(shù)據(jù)類型??梢院?jiǎn)寫成PIC.

格式字符串最多30個(gè)字符,可以包含下列字符:

A

字母A-Z,a-z,空格

B

插入空格

P

標(biāo)量字符,代表字段中不顯示的小數(shù)點(diǎn)位置

S

代數(shù)符號(hào),實(shí)際顯示取決于項(xiàng)目的USAGE

V

小數(shù)點(diǎn)位置

X

任何字符

Z

抑制前頭的0并轉(zhuǎn)換成空字符

0

插入0

9

數(shù)字0~9

/

插入/

,

插入,(逗號(hào)不能作為字符串的最后一位,最后時(shí)逗號(hào)是分隔符)

。插入。

*

抑制前頭的0并轉(zhuǎn)換成*

+

正值插入+,負(fù)值插入-

-

正值插入空格,負(fù)值插入-

$

插入美元號(hào)

CR正值插入兩個(gè)空格,負(fù)值插入CR

DB正值插入兩個(gè)空格,負(fù)值插入DB例子:

03VARPICAAAAA.

STATE變量長(zhǎng)度為5個(gè)字符,不能有數(shù)字,等價(jià)于03STATEPICA(5)。

輸入ASDFG,顯示ASDFG

03VARPICXXXXX.

FILLER變量長(zhǎng)度為5個(gè)任意字符。等價(jià)于03FILLERPICX(5)。

輸入123AS,顯示123AS

03VARPIC99/XXX/9999長(zhǎng)度11,輸入05may2004,顯示05/may/2004

03VARPIC0ABXXX/9999長(zhǎng)度11,輸入05may2004,顯示05may/2004

03VARPIC9(3)長(zhǎng)度3,0~999之間。

03VARPIC9(4)V99長(zhǎng)度6,0.00~9999.99之間。

03VARPICS9(5)V99長(zhǎng)度7,-99999.99~99999.99之間。

03VARPIC9(6)PPP長(zhǎng)度6,可以是1000,2000,...,999999000。輸入1234,顯示1000。

03VARPICPPP999長(zhǎng)度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表示基本或組數(shù)據(jù)的類型。有BINARY,COMPUTATIONAL(COMP),DISPLAY,INDEX,PACKED-DECIMAL.

JUSTIFIED

03VAR1PICX(5)JUSTIFIEDRIGHT.

03VAR2PICX(5).

輸入XYZ,VAR1顯示的是"

XYZ",VAR2顯示的是"XYZ

"。

BLANKWHENZERO

03VARPIC$999,999.99BLANKWHENZERO.

當(dāng)字段值為0,這個(gè)項(xiàng)目設(shè)置為全部空格。

VALUE

定義的時(shí)候就賦值。

03VARPICX(5)VALUE"ABCDE".

01VARVALUEALLSPACES.

03VAR1PICXXX.

03VAR2PICXX.

算術(shù)語(yǔ)句

COBOL中操作符執(zhí)行順序?yàn)椋喝≌?+)、取負(fù)(-)最高級(jí),指數(shù)操作(**)其次,乘(*)、除(/)再其次,加(+)、減(-)最后。ROUNDED

舍入操作。

77APIC9V9VALUE9.1.

77BPIC9.

ADD0.5TOAGIVINGBONSIZEERRORGOTOPROC1.

ADD0.5TOAGIVINGBROUNDEDONSIZEERRORGOTOPROC2.

END-ADD.ONSIZEERROR是當(dāng)語(yǔ)句出現(xiàn)錯(cuò)誤時(shí)執(zhí)行的。本例中第一句話執(zhí)行沒(méi)有錯(cuò)誤,所以O(shè)NSIZEERROR不執(zhí)行PROC1.第二句話,當(dāng)0.5加上9.1得到9.6,因?yàn)橛蠷OUNDED,所以執(zhí)行舍入操作,得到10。而B(niǎo)只有1位數(shù)字,所以發(fā)生錯(cuò)誤,執(zhí)行ONSIZEERROR操作,跳轉(zhuǎn)執(zhí)行PROC2。

CORRESPONDING(CORR)數(shù)據(jù)項(xiàng)同名時(shí)編寫多條語(yǔ)句。ADD和SUBSTRACT有此選項(xiàng)。

01A.

03B.

05B1PIC999V99.

05B1PIC999V99.

05B1PIC999V99.

03C.

05B1PIC999V99.

05B1PIC999V99.

05B1PIC999V99.則語(yǔ)句ADDCORRBTOC.相當(dāng)于執(zhí)行了下面3條語(yǔ)句。

ADDB1OFBTOB1OFC.

ADDB2OFBTOB2OFC.

ADDB3OFBTOB3OFC.組項(xiàng)目不一定要格式相同。一個(gè)組項(xiàng)目中的內(nèi)容在另一個(gè)組項(xiàng)目中可以沒(méi)有,數(shù)據(jù)項(xiàng)順序也無(wú)關(guān)緊要。只是嚴(yán)格按照數(shù)據(jù)項(xiàng)名稱對(duì)應(yīng)。

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的結(jié)果放入C.

DIVIDEABYBGIVINGC.END-DIVIDE.

將A除于B的結(jié)果放入C.

DIVIDEABYBGIVINGCREMAINDERD.

將A除于B的商放入C,余數(shù)放入D.

D=A-B*C.

77CPICS99V9.

77DPICS99V9.

DIVIDE3INTO7GIVINGCREMAINDERD.

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

除了取余操作要用DIVIDE外,其他操作都可以用此語(yǔ)句。本語(yǔ)句求值一個(gè)算術(shù)表達(dá)式,并將結(jié)果存放在一個(gè)或幾個(gè)變量中。COMPUTE

AROUNDED,B

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

MOVE

MOVEATOB.

也可以用CORR選項(xiàng)。

MOVECORRATOB.

ACCEPT

從鍵盤或其他輸入設(shè)備讀取數(shù)據(jù)。

ACCEPTAFROMDEV.

從DEV讀取數(shù)據(jù)到A,也可以省略FROMDEV,表示從鍵盤讀取。

ACCEPTAFROMDATE/DAY/DAY-OF-WEEK/TIME.讀取日期,表示為6個(gè)字符,如990909(1999年9月9日)。

讀取當(dāng)前日期在年度(前2位)中為第幾天(后3位),表示為6個(gè)字符,如1994年4月1日表示為94091。

讀取當(dāng)前星期幾,表示為1位字符。1表示星期一,7表示星期日。

讀取當(dāng)前時(shí)間,表示為8位字符。精確到毫秒。如下午2:41表示為14410000。

DISPLAY

將數(shù)據(jù)寫入輸出設(shè)備。如監(jiān)視器(monite),系統(tǒng)輸出流和操作員控制臺(tái)(console)。

DISPLAYAAAAABBBBB[UPONDEV][WITHNOADVANCING]

如果使用UPON選項(xiàng),dev要與special-names段中的硬件名相關(guān)聯(lián)。

如果使用noadvancing選項(xiàng),則輸出最后一個(gè)字符后輸出設(shè)備仍然保持原位,使下一條display語(yǔ)句還在該位置顯示。否則可能到下一行顯示。

INITIALIZE

初始化數(shù)據(jù),數(shù)字和數(shù)字編輯數(shù)據(jù)項(xiàng)初始化為0,其他初始化為空格。INSPECTTALLYING

計(jì)算項(xiàng)目中該字符串出現(xiàn)的次數(shù)。

INSPECTAATALLYINGBBFORALL“EE”.

從AA中查找有多少個(gè)EE,將個(gè)數(shù)寫入BB。

INSPECTAATALLYINGBBFORCHARACTERSBEFORE“E”.

從AA中查找E前面有多少個(gè)字符,將個(gè)數(shù)寫入BB。

INSPECTAATALLYINGBBFORCHARACTERSAFTER“C”BEFORE“E”.

從AA中查找C后面E前面有多少個(gè)字符,將個(gè)數(shù)寫入BB。

INSPECTAATALLYINGBBFORLEADING“E”.

從AA中第一個(gè)字符開(kāi)始查找有多少個(gè)E,如果沒(méi)有就結(jié)束操作,有就將個(gè)數(shù)寫入BB,直至沒(méi)有。

INSPECTAATALLYINGBBFORLEADING“E”AFTER“C”.

從AA中C后面開(kāi)始查找有多少個(gè)E,如果沒(méi)有就結(jié)束操作,有就將個(gè)數(shù)寫入BB,直至沒(méi)有。組合例子:

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",執(zhí)行COUNT-0FORALL"E",因?yàn)榈谝粋€(gè)字符不是"E",所以程序轉(zhuǎn)而執(zhí)行COUNT-1FORLEADING"W"AFTER"L",也不符合要求,

于是程序執(zhí)行COUNT-2FORCHARACTERS,COUNT-2=1。然后字符串往下一位,判斷"E",執(zhí)行COUNT-0FORALL"E",符合要求,則COUNT-0=1。

有了滿足條件的判斷,則余下的判斷不再執(zhí)行,字符串再往下一位,判斷"E",則COUNT-0=2。接著判斷"L",則COUNT-2=2。以此類推,最后結(jié)果為COUNT-0=4,

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

用另一個(gè)字符串替換這個(gè)字符串。

還用上面的例子。

INSPECTCSREPLACINGALL"E"BY"Y".

結(jié)果"RYYLWHYYL"

INSPECTCSREPLACINGCHARACTERSBY"Z"AFTER

"L".

結(jié)果"REELZZZZZ"

INSPECTCSREPLACINGLEADING"E"BY"Y".

結(jié)果不變

INSPECTCSREPLACINGLEADING"E"BY"Z"AFTER

"H".

結(jié)果"REELWHZZL"

INSPECTCSREPLACINGFIRST"E"BY"I".

結(jié)果"RIELWHEEL"

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

結(jié)果"00TH

"INSPECTCONVERTING

就是INSPECTREPLACING的縮寫。

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

將幾個(gè)字符串合并成一個(gè)字符串。

STRINGADELIMITEDBYSPACE,"!"DELIMITEDBYSIZEINTOC.假設(shè)A中的內(nèi)容是"HELLO",則結(jié)果是"HELLO!".

DELIMITEDBYSPACE意思是碰到空格,或到A的結(jié)尾或C的結(jié)尾,則合并A字符串結(jié)束。

DELIMITEDBYSIZE意思是到"!"的結(jié)尾或C的結(jié)尾,則合并"!"字符串結(jié)束。

STRINGAINTOBPOINTERCONOVERFLOWPROC1NOTONOVERFLOW

PROC2.

將A字符串復(fù)制到B中由C開(kāi)始的地址處。如果C小于1或大于B的長(zhǎng)度,或A的長(zhǎng)度大于B中C到結(jié)尾處的長(zhǎng)度,則發(fā)生

OVERFLOW溢出,執(zhí)行PROC1。

UNSTRING

將一個(gè)字符串中的字符按照要求放入多個(gè)變量中。

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,則如果幾個(gè)相同的B在一起,則認(rèn)為是一個(gè)B。

DELIMITERIN將B放入D,知道是哪個(gè)字符為分隔符。

COUNTIN實(shí)際復(fù)制到C中的字符數(shù)放入E中。

WITHPOINTER和STRIGN中一樣。

TALLYINGIN計(jì)算有幾個(gè)接受項(xiàng)。訪問(wèn)一個(gè)新的接受項(xiàng),G值加1。例子:

03CITYPICX(10).

O3ZIP

PICX(10).

77TESTPICX(20).

MOVE"NEWYORK,

UNSTRINGTESTDELIMITEDBY","INTOCITY,ZIP.

執(zhí)行結(jié)果CITY值是NEWYORK.ZIP的值是NY10017。

邏輯和控制語(yǔ)句

IF(A[NOT]>B)等價(jià)于IF(A[NOT]GREATERTHANB)

IF(A[NOT]<B)等價(jià)于IF(A[NOT]LESSTHANB)

IF(A[NOT]=B)等價(jià)于IF(A[NOT]EQUALTOB)

IF(A>=B)等價(jià)于IF(AGREATERTHANOREQUALTOB)

IF(A<=B)等價(jià)于IF(ALESSTHANOREQUALTOB)

IFAIS[NOT]NUMERIC

數(shù)字和可選符號(hào)

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-".

判斷變量是否定義了數(shù)值。這個(gè)變量是88層的,且要與一個(gè)數(shù)據(jù)項(xiàng)關(guān)聯(lián)。

03STATEPICXX.

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

IFCON...

判斷廠家定義運(yùn)行開(kāi)關(guān)的開(kāi)/關(guān)狀態(tài)。

SPECIAL-NAMES.

SWITCH-AONSTATUSISA-ON,OFFSTATUSISA-OFF.

IFA-ON...

若開(kāi)關(guān)在開(kāi)位置,則IFA-ON返回TRUE。

IFAIS[NOT]POSITIVE

判斷是否大于0

IFAIS[NOT]NEGATIVE

判斷是否小于0

IFAIS[NOT]ZERO

判斷是否等于0PERFORM

過(guò)程調(diào)用,但是不傳遞參數(shù)。

PERFORMPROC1[THROUGHPROC2]

執(zhí)行完P(guān)ROC1再執(zhí)行PROC2.沒(méi)有THROUGH(THRU)就只執(zhí)行PROC1.

PERFORMPROC1[THRUPROC2]NTIMES

執(zhí)行PROC1[或者還有PROC2]N次。

PERFORMPROC1[THRUPROC2][WITHTESTBEFORE/AFTER]UNTILANOTEUQAL0.

執(zhí)行PROC1[或者還有PROC2]直到A不等于0。WITHTESTBEFORE/AFTER指定在第一次執(zhí)行之前還是之后判斷條件。默認(rèn)是BEFORE,執(zhí)行之前判斷。

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

相當(dāng)于FOR循環(huán),將A的值從B開(kāi)始,以C為單位遞增,直到滿足CONDITION1。AFTER語(yǔ)句是一個(gè)嵌套的FOR循環(huán)。VARYING是外循環(huán),AFTER是內(nèi)循環(huán)。A,B可以是索引。

過(guò)程也可以直接寫入PERFORM中。但是THROUGH就不好用了。語(yǔ)法如下:

PERFORM過(guò)程語(yǔ)句END-PERFORM.

PERFORMNTIMES過(guò)程語(yǔ)句END-PERFORM.

PERFORM[WITHTESTBEFORE/AFTER]UNTILCONDITION過(guò)程語(yǔ)句END-PERFORM.

PERFORM[WITHTESTBEFORE/AFTER]VARYINGAFROMBBYCUNTILCONDITION1過(guò)程語(yǔ)句END-PERFORM.

IF語(yǔ)句

IFCONDITIONTHENSTATEMENTS1/NEXTSENTENCEELSESTAT

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論