




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
PAGEPAGE49關于COBOL的初步知識一.COBOL語言的特點COBOL是CommonBusiness-OrientedLanguage(公用面向商業的語言)的縮寫,主要供數據處理、數據收集及分析之用。COBOL自60年代初開始廣泛應用于計算機應用領域(商業和其他領域)。事實上,除了商業之外,各種管理工作都廣泛使用COBOL,如各種統計工作,財會工作,企業計劃編制,作業制度,情報檢索,人事管理等。COBOL針對商業世界的使用,是真正商用應用程序開發的首選語言。適于數據處理領域。采用英語語法的高級語言,可讀性、可維護性、可移植性較強。通用性強,標準化程度較高。結構嚴謹,層次分明。缺點是比較繁瑣。最簡單的COBOL程序介紹例1:IDENTIFICATIONDIVISION.(標識部)PROGRAM-ID.EXAM1.(程序標識段)ENVIRONMENTDIVISION.(設備部)DATADIVISION.(數據部)PROCEDUREDIVISION.(過程部)A.DISPLAY‘THISISACOBOLPROGRAM.’.STOPRUN.例2:IDENTIFICATIONDIVISION.(標識部)PROGRAM-ID.EXAM2.(程序標識段)ENVIRONMENTDIVISION.(設備部)DATADIVISION.(數據部)WORKING-STORAGESECTION.(工作單元節)APICTUREIS9(3).(對A進行描述)77BPICTUREIS9(3).(對B進行描述)PROCEDUREDIVISION.(過程部)S.ACCEPTA.(輸入A值)ACCEPTB.(輸入B值)ADDATOB.(A+B->B)DISPLAYA,B.(顯示A和B值)STOPRUN.COBOL程序的結構部每個程序都包括四個部:IDENTIFICATIONDIVISION(標識部)提供程序的一般性文檔說明,主要用來指定源程序名。ENVIRONMENTDIVISION(環境部)列出程序中所用到的文件。程序中不需要外部文件時,環境部為空,也可以省略部標題。DATADIVISION(數據部)程序中所用到的全部數據(包括:文件數據—-用于輸入輸出、靜態數據、參數等)都應在數據部中說明它們的類型和所占內存的情況。PROCEDUREDIVISION(過程部)包含構成程序的過程性語句,用來給出程序要執行的指令,使計算機產生相應的操作。節和段標識部下只有各個段。除標識部以外,每個部下可以有若干個節(SECTION),每個節以“節頭”作標識。每個節下又可包括若干段(PARAGRAPH),每個段用“段名”標識。各個段內有各種COBOL元素。句子,語句和子句在過程部中,每一段由若干個句子(Sentence)組成。一個句子是以英文句號來結束的。句子又由語句(Statement)組成。一個語句中又可以包含若干個子句(Clause)。注意:部標題、節標題、段名、數據項目描述及句子后必須用英文句號結束,否則程序無法編譯。描述體(描述款目)在數據部中有若干個節,每個節中有若干個描述體,每個描述體又有若干個子句構成。源程序的書寫格式1~6列,為“序號區”,為6位整數序號,不是程序本身的內容。序號不是必須的,但其所占區域要保留。第7列,為“指示符區(續行標志區)”。連接符“-”表示本行是緊接在上一行的后面。“*”或“/”表示本行為注釋行。“D”表示本行為調試行。8~11列,為“A區”,部頭,節頭,段頭,層號01,層號77以及文件描述符FD,程序結束標題等應從A區開始書寫,但不一定從第8列開始寫。12~72列(現在有時廠家規定可到80列),為“B”區,過程部中的句子只能從B區開始書寫。73~80列,為“注釋區”。在寫程序時,應注意以下幾點:1.大寫或小寫字母均可,習慣用大寫字母。2.相鄰的兩個字之間必須留一個以上的空格。3.運算符和等號左右兩邊必須各留一個空格。4.逗號,句號,分號的左邊不能留空格,而右邊應有空格。COBOL字符和COBOL單字COBOL字符集包括以下字符:0~9,a~z,A~Z,+-*/=,.;’”()<>$空格:COBOL單字分三種:保留字、用戶自定義字及系統名稱。COBOL單字的規則如下:字長為1~30個字符之間。只能由字母,數字和連字符“-”組成,第一個和最后一個字符不能用連字符。字中不能出現空格。小寫字母與大寫字母等價。不能用保留字作為用戶定義字和系統名稱,但用戶定義字和系統名稱可以用同一個單詞。用戶自定義字:文件、數據、標號、程序等所取的名稱。系統名稱:COBOL保留字,用于與操作環境通信,又COBOL廠家定義。分為:Computername、Implementersname、Languagename。保留字:有300多個。如:+、ACCEPT、ADD、BEFORE、DATA。常量數值常量(數字直接數)例:123,+45.67,-89.65非數值常量(非數字直接數):字符串內的引號用兩個連續引號表示。例:’abcd’,’Expired’,象征常量:用保留字表示某些常用常量(直接數)。例:ZEROZEROSZEROESSPACESPACESHIGH-VALUEHIGH-VALUESLOW-VALUELOW-VALUESQUOTEQUOTESALL常量七.COBOL處理數據的特點:層次的概念;記錄和文件的概念。八.程序文本的復制與替換操作COPY語句COPY語句用COBOL源文本text-name替換從COPY字開始到終止句號之前的內容。REPLACE語句REPLACE語句將COBOL源程序某個段中的文本進行替換。替換從REPLACE語句的第一個格式開始,到REPLACEOFF語句結束。第二章標識部和環境部標識部(IDENTIFICATIONDIVISION)(一)必寫部分IDENTIFICATIONDIVISION.PROGRAM-ID.程序名.(二)任選部分一般格式:[AUTHOR.作者姓名][INSTALLATION.設計這個程序的公司或部門。][DATE-WRITTEN.編寫日期,可記入修訂史,修改日期、原因及人員。][DATE-COMPILED.編譯日期][SECURITY.保密程度的描述。]注:標識部中的段標題只能按部描述中指定的順序出現。環境部(ENVIRONMENTDIVISION)環境部指定程序中與特定計算機或操作系統相關的方面,指明用到哪些設備,哪些文件,將程序中用到的內部文件名與外部文件(或外部設備)聯系起來。如果程序不需要任何環境部提供的項目,則可以省略環境部。一般格式:ENVIRONMENTDIVISION.CONFIGURATIONSECTION.配置節SOURCE-COMPUTER.OBJECT-COMPUTER.SPECIAL-NAMES.INPUT-OUTPUTSECTION.輸入/輸出節FILE-CONTROL.I-O-CONTROL.配置節包括SOURCE-COMPUTER,OBJECT-COMPUTER和SPECIAL-NAMES(專用名段)。SOURCE-COMPUTER段標識編譯程序的計算機。若該段省略,則編譯程序的計算機是源計算機。如果指定WITHDEBUGGINGMODE從句,則編譯所有源調試行,否則把調試行作為說明語句。OBJECT-COMPUTER段標識編譯程序運行的計算機。SPECIAL-NAMES段用于把系統中原規定的一些設備名或功能名或符號改為用戶自己指定的名字或符號。SPECIAL-NAMES.CLASSREAL-NUMBERIS"0123456789+-."可用于類條件測試DECIMAL-POINTISCOMMA.逗號用作小數點,句號用作編輯符CURRENCYSIGNIS“Y”.表示貨幣符號的字符,DEFAULT$輸入輸出節輸入輸出節只用于文件,它把內部文件與外部文件(包括外部設備)聯系起來。它有兩個段:文件控制段:FILE-CONTROL段是給文件命名,指出存放該文件的外部設備及其他有關文件控制信息。對每個文件包含一個項目。FILE-CONTROL.SELECTFILE-1ASSIGNTO“FILE-1.TXT”.SELECTFILE-2ASSIGNTODISK.SELECTFILE-3ASSIGNTOPRINTER.輸入輸出控制段:I-O-CONTROL段包含定義程序返回點,不同文件共享的內存區和多文件卷中文件位置的項目。數據部數據部的節數據部包含程序引用的所有數據的定義,如文件記錄、變量、表格和報表。COBOL將數據部分成節,每個節是可選的,但程序中的節應按指定順序定義。DATADIVISION.FILESECTION.文件節WORKING-STORAGESECTION.工作存儲節LINKAGESECTION.連接節COMMUNICATIONSECTION.通信節REPORTSECTION.報表節文件節程序中每一個輸入或輸出文件都要在文件節中定義。包括:文件名和文件屬性。文件中包括的記錄名。每個記錄中數據的層次關系。記錄中各數據項的數據形式和占內存的大小。DATADIVISION.(數據部)FILESECTION.(文件節)FDFILE-1.(文件名)LABELRECORDISOMITTEDDATARECORDISSTUDENT-SCORE.01STUDENT-SCORE.(記錄名)03NAMEPICX(10).03NUMPIC9(06).CORUSE-SCORE.05CORUSE-1PIC9(03).05CORUSE-2PIC9(03).05CORUSE-3PIC9(03).工作存儲節包含程序所需的臨時結果和初始化靜態數據的數據定義。WORKING-STORAGESECTION.77XPICS99VALUE-21.01APIC9(08).01B.03B1PICX(04).03B2PICX(02).03B3PICX(02).連接節本節只用于子程序,包含調用程序傳遞的數據(即參數)。LINKAGESECTION.01LCMIN.COPYRCI001.01LCMOT.COPYRCJ001.通信節通信節描述作為程序間接口的數據和消息控制系統,用以實現與通信設備相關的消息分析的COBOL方法。屬過時部分,很少使用。報表節報表節描述實現COBOL報告編寫工具的系統所需的數據。REPORTSECTION.RDEMPLOYEE-REPORTPAGELIMIT60LINESHEADING1FOOTING58FIRSTDETAIL3.二.COBOL數據的類型及層次(一)數據類型(1)numeric(數字)(2)numeric-edited(數字編輯)(3)alphabetic(字母)(4)alphanumeric(字母數字)(5)alphanumeric-edited(字母數字編輯)所有數據類型缺省作為字符串存放在內存中,唯一可以用不同方式存儲的數據類別是數字型數據(通過USAGE子句)。對數字型數據制訂不同方式存儲,提高計算效率。(二)數據的層次和層號COBOL中把有從屬關系的數據用層次關系來描述。數據的層次結構是:記錄—組合項—基本項。層次規定如下:(1)用來描述數據的層次結構的層號從01開始,到49結束,即可用的層號為01~49。(2)從屬項的層號比其上屬項的層號高。(3)如果幾個數據項都從屬于同一組合項但互不從屬,則這幾個數據項應具有相同的層號。(4)77層項目用于某個組的數據項,如程序中的臨時變量。(5)66層和88層是特殊層。88層是對特殊數據項目條件名保留的。(在講過程部的條件語句時再詳細介紹。)66層是用于更明現有數據項或數據項組。(講RENAMES語句時再介紹。)(三)限定數據(四)FILLER關鍵字需要定義部分記錄,但這部分在程序中永遠不會用到,則可用保留字FILLER占有這個記錄部分的位置。舉例:一個打印用的記錄行,有固定的空格時。如果組項目不需按名稱引用,則可以用FILLER關鍵字作為數據名,不用生成組名,但FILLER組名中定義的每個數據項應當唯一。三.數據部用子句(一)PIC子句PIC是PICTURE的縮寫,PIC子句用來描述每一個基本數據項,定義基本項目的具體長度、格式和數據類型。01A.03A1PIC9999.03A2PICAAAA.03A3PICXXXX.(A)字母數據字母數據限于字母表中使用的字符和空格符,用A描述符表示,每個字符用一個A表示。01XPICA(4).MOVE‘ABC’TOX.(B)字符數據(字母數字)字符數據可以包含計算機字符集中的任何字符。字符數據項目的格式字符串可用用A、X、9表示,至少要包含一個X,是非數值類型的,不能用于運算。01XPICX(4).01YPICX(8).01ZPICA(5)X9(2).MOVE’BOOK’TOXMOVE’1234’TOXMOVE’COBOL-85’TOYMOVE’COBOL-85’TOZ(C)字符編輯數據(字母數字)要把字符數據格式化成特定形式,則可以用字符編輯數據。字符編輯數據用特定字符表示格式。字符編輯數據項目的格式字符串可用A、X、9、B、0和/表示,至少要有一個A或X和一個B(空格)或0(0)或/(斜杠)。01EDITED-DATEPICTUREIS99/XXX/9999.MOVE’05May1909’TOEDITED-DATE則EDITED-DATE的值為‘05/May/1909’(D)數字數據數字數據由數字組成,包括其隱含的小數點和操作符號,表示的是實際數字值,可用于數據運算。數字數據只能包含字符9,V,S和P的組合,至少要有一個9,最多18個9,至少一個V和S。1.“9”描述符表示數字存放位置,不能放入空格,不能表示小數和負數。算進項目長度中。描述數值內存中表示長度數值范圍01XPIC99912312330~99901YPIC9(4)4567456740~999901ZPIC9912.3412201TPIC99-12.341222.“V”描述符指出在數據中隱含的小數點的位置,不占內存,不算進項目長度中。運算時按隱含的小數點位置對準進行運算。顯示時只顯示內存中的內容,不顯示小數點。不包含V的項目假設的小數點位于最右邊。描述數值內存中表示長度數值范圍01XPIC99V99.87.5875040.00~99.9901YPIC9(3)V9(2).7817810050.000~999.9901ZPICV9991.234234301TPIC999V12312333.“P”描述符表示數據項的比例因子,不占內存,不算進項目長度中。當數值很大,前面或后面若干位為0,為了節省內存可以用“P”描述符。P只能出現在開頭或末尾,而不能同時在兩處出現。顯示時只顯示內存中實際存放的數字而不顯示隱含的P(即0)。描述數值內存中表示長度數值范圍01XPIC9P(4).10000111~9*1000001YPICPPP99.0.000232320.00001~0.000994.“S”描述符表示一個帶符號的數,符號不算如項目長度中,除非包括SIGNISSEPARATE從句。如有S則必須是最左邊一個描述符。如無S則總是表示為正值。描述數值內存中表示長度數值范圍01XPICS9(3)V9(2)126.89126895-999.99~999.9901YPICS9(3)V9(2)-1126.897126895(E)數字編輯數據為了使輸出數據更易讀,可以定義數字編輯數據。數字編輯數據可以用于顯示數字,但所有計算中只能用數字數據。數字編輯數據項目的格式字符串只能包含字符9、Z、B、0、/、P、V、,、。、*、+、-、CR、DB的組合。它必須包含1~18個9字符,包含至少一個除9、P、V以外的字符。1.“.”描述符表示插入小數點的位置,只能在格式字符串中使用一次,不能與V和P同時使用。01WPIC9(3).9(2).01VPIC9(3)V9(2).MOVE123.45TOVMOVEVTOW錯誤:01WPICS9(3).9(2).2.“,”描述符表示插入逗號的位置,盡管它通常作千位分隔符,但也可以插入格式字符串其他地方。01WPIC999,999.99.MOVE123456.78TOW輸出表示:123,456.783.“0”描述符表示插入’0’。4.“B”描述符表示插入空格。01WPIC9(3).01VPICB9(3)B.MOVE123TOW.MOVEWTOV.5.“+”或“-”描述符表示在輸出的數值前(或后)加正號或負號。當用“+”時,不論數值為正或負一律加符號。當用“-”時,當數值為正時,數值前空一格,數值為負時,加一負號。01XPICS99.01YPIC+99.01ZPIC-99.01UPIC99+.01VPIC99-.6.插入“$”01APIC$999.99.01BPIC+$999.99.01CPIC-$999.99.7.浮點插入形式(浮動插入正負號和“$”)“$”,“+”,“-”的位置是浮動的,能夠使符號緊挨著數字之前輸出。在編輯型數據的描述中,指定浮動插入的字符個數應足夠,以免數據被截斷。浮動字符前不能再出現其它符號,即浮動字符應為第一個描述字符。01A1PICS9(3)V99.01A2PIC++++.99.01A3PIC$$$$.99.01A4PIC++++.++.01A5PIC$$$$.$$.錯誤:01A1PIC+$$.99.8.零抑制格式(取消高位零,用“Z”和“*”描述符)01A1PICS9(3)V99.01A2PICZZZZ.99.01A3PIC****.99.(1)不能同時用Z浮動和+,-,$浮動錯誤:ZZ$$9.99或++ZZ.99(2)單個的+,-,$可以與Z或*連用01A1PIC+ZZZ.99.01A2PIC-*(3).99.01A3PIC$ZZZ.99.(3)如果使“Z”或“*”對應與所有的數字字符,當數值為0時,則所用數字位全部由空格或*代替。小數點位置上,由空格代替(用Z時),或保留“.”(用*時)。01A1PICZZZ.ZZ.01A2PIC***.**.(4)可與“,”連用01A1PICZ,ZZZ.99.9.插入“DB”和“CR”字符DB(DEBIT,借方)和CR(CREDIT,貸方)只能用作固定插入,而且只作最后一個描述符號。當數值為負時,在編輯型數據項中最后兩個字節中置DB或CR,數值為正時,此兩字節留空格。01A1PIC$9(3).99DB.01A2PIC$999.99CR.10.PIC子句小結描述字符含義9表示一個數字位置A表示一個字母位置X表示一個字符位置V表示隱含的小數點位置S表示數值數據帶符號P表示十進比例換算$插入貨幣號.插入小數點位置,插入逗號位置+一律加符號-對負數加負號,對正數前留一空格Z取消高位零,用空格代替*取消高位零,用*代替B插入空格0插入零DB(借方)數據為負時,在數據后面插入DB,為正時,空兩格CR(貸方)數據為負時,在數據后面插入CR,為正時,空兩格(二)REDEFINES子句REDEFINES子句可以用不同數據描述同一計算機內存,適用于基本數據項和組數據項。層號數據名1REDEFINES數據名202A.03A1PIC9(4).03A2PICX(6).03A3PICX(4).02BREDEFINESA.03B1PICX(5).03B2PIC9(6).03B3PIC99V9.02CREDEFINESA.03C1PICX(5).03C2PICX(4).03C3PICX(5).規則:(1)數據名2與數據名1的層號必須相同。內存中的值為數據名1和數據名2共享。(2)用REDEFINES子句的描述體應緊跟在被重新定義的數據項的描述之后,中間不能插入其它項的說明。當進行多次重定義,必須緊跟出現,而且要求使用最初定義的數據名。(3)不能用于文件節或報表節的01層,可用于工作單元節的01層。(4)用REDEFINES子句可以改變數據的結構,REDEFINES從句定義的區域長度應小于等于原區域長度。(5)REDEFINES子句應在其它子句之前。(6)使用REDEFINES子句的數據項不能使用VALUE子句賦初值。(7)數據名2不能包含OCCURS子句。03APICX(8)VALUE’ABCDEFGH’.03BREDEFINESA.05B1PICX(4).05B2PICX(4).(三)USAGE子句USAGE子句可以指定計算機內存中的數據項格式,充分利用計算機內存空間和算術功能。USAGE子句不影響項目的使用(但過程部的有些語句將某些操作數限于某種USAGE從句)。USAGE子句可以用于基本和組數據項目。[USAGEIS]BINARYDISPLAYCOMPUTATIONALCOMPCOMPUTATIONAL-1COMP-1COMPUTATIONAL-2COMP-2COMPUTATIONAL-3COMP-3COMPUTATIONAL-4COMP-4COMPUTATIONAL-5COMP-5INDEXPACKED-DECIMAL缺省為DISPLAY。BINARY、COMPUTATIONAL、PACKED-DECIMAL只用于數字數據項。BINARY指定項目存放成二進制數。在PIC子句中描述字符9的個數為1~4時,占內存字節為2;個數為5~9時,占內存字節為4;個數為10~18時,占內存字節為8。COMPUTATIONAL由廠家定義。大多選擇與BINARY相同。COMPUTATIONAL-1由廠家定義。大多定義為單精度內部浮點數字項,用內存4Byte。(不用PIC)COMPUTATIONAL-2由廠家定義。大多定義為雙精度內部浮點數字項,用內存8Byte。(不用PIC)PACKED-DECIMAL指定數字按縮和十進制存放,以減少每個數字的存儲量。每個數字4位或每個字節表示2個數字。符號也占半個字節,放在最后面(無符號,用‘1111’;+號,用‘1100’;-號,用‘1101’)。COMPUTATIONAL-3由廠家定義。大多選擇與PACKED-DECIMAL一致。COMPUTATIONAL-4由廠家定義。大多選擇與PACKED-DECIMAL一致。COMPUTATIONAL-5由廠家定義。類似于USAGECOMP,但與在某些平臺上的字節順序相反。在支持小尾字節順序的平臺上,COMP-5執行速度更快。(COMP-X類似于COMP-5,但按大尾字節順序存放。)INDEX用法是特殊用法,指定用該項目作為表格索引。采用INDEX用法的項目只能在過程部的某些語句中,不能有PIC從句。注:USAGE從句用于組層時作用于組中每個基本項目。如用BINARY時,組中的所有基本項目都要用數字。03APIC9(4)COMP.03BPIC9(4).03CCOMP.05C1PICS9(3).05C2PICS9(6).(四)SIGN子句SIGN子句可以指定格式字符串包含S字符的數字數據項中符號的位置。[SIGNIS]LEADING[SEPARATECHARACTER]TRAILING通過LEADING或TRAILING來指定符號在數字的第一位(LEADING)或最后一位(TRAILING)。符號的具體表示由廠家指定。如果有SEPARATE子句,則符號用標準字符+或-表示,符號位記入數據項的長度。(五)OCCURS子句OCCURS子句指定數據項為固定項目數或可變項目數的表格(即數組)。OCCURS子句不能用于01和77層,可以用于基本或組數據項目。詳細內容見表格處理。(六)SYNCHRONIZED子句SYNCHRONIZED子句指定基本數據項在計算機內存自然邊界上的對齊。指定SYNCHRONIZED子句時的具體效果由廠家指定??蓞⒖唇炭茣?5章。(七)JUSTIFIED子句JUSTIFIED子句(簡稱JUST)只能用于非編輯的字母數字基本數據項。即數據放進這個項目時,它與最右邊的字符對齊。數據太長時左邊截尾,太短時則左邊填充。標準規則為與最左邊的字符對齊并在右邊截尾或填充。(八)BLANKWHENZERO子句BLANKWHENZERO子句只能用于數字型或數字編輯型的基本項。使用時,當數據項的值為零時,內容改變為空格。03APIC$(5).99BLANKWHENZERO.03BPICZ,ZZ9.99BLANKWHENZERO.03CPIC***.**BLANKWHENZERO.(BLANK子句不起作用)(九)賦初值子句(VALUE子句)程序中的數據往往需要賦初值,可以用VALUE子句來實現。01A1PIC99VALUE12.01A2PICX(5)VALUE’COBOL’.01A3PICS99V99VALUE-12.34.01T.03A4PIC9(6)VALUEZERO.03A5PICX(6)VALUESPACES.03A6PICX(6)VALUEALL’A’.A7VALUE’1234’.組項目被初始化了,則下屬項目不能有05A71PIC99.VALUE子句。05A72PIC99.四.66層RENAMES項目用66層RENAMES項目可以在不改變數據項的長度的前提下,重新定義數據區的名稱和數據結構的形式。原各基本項的類型和長度不變。即是說該格式可以更名現有數據項或數據項組,或以原定以未允許的方式組合。66數據名1RENAMES數據名2[THRU數據名3]01A.03B05G05H03C05I05J03D03E03F66KRENAMESGTHRUI.66MRENAMESBTHRUC.66NRENAMESE.(1)層號只能用66,它必須緊跟在01層記錄中最后一個數據描述體之后。(2)只能用于工作單元節中,不能用于文件節中。(3)指定數據名3時,數據名3必須在數據名2后面定義,不能從屬于數據名2。此時數據名1是一組項目。過程部一.簡介過程部是COBOL程序的最后一個部分。包含程序運行時要執行的所有語句。以PROCEDUREDIVISION開頭,包含對數據操作的程序邏輯。過程部的組件包括語句、句子、段和節。語句(statement):以動詞開頭的單詞、直接數和分隔符的組合。語句應一律從B區(12列開始)開始寫,續行也應從B區開始。句子(sentence):以英文句號(.)結尾的一系列語句。段(paragraph):由段名、句號分隔符和零或幾條句子組成。段的最后一條語句要用英文句號結束。節(section):由節標題加上保留字SECTION和分隔符句號。注:段名應在節中保持唯一性、節名應在程序中保持唯一性。段名不能與節名重復。引用段名時可以用所屬的節限定如下:GOTOPARA-1INSECTION-22.例1:PROCEDUREDIVISION.(過程部頭)ASECTION. (A節)A1.MOVE1TOI.(A1段)MOVE2TOJ.A2.ADDITOJ.(A2段)BSECTION.(B節)…例2:PROCEDUREDIVISION.DISPLAY’HOWDOYOUDO’STOPRUN.例3:MOVE100TOX.ADDYTOZ.IFX>100GOTOFINISH.二.算術運算語句加法語句(ADD語句)ADDATOBA+B→BADD15TOC15+C→CADDA,BTOCA+B+C→CADD15,25TOC15+25+C→CADDA,BGIVINGCA+B→CADD15,25GIVINGC15+25→CADDA,BTOC,DA+B+C→C,A+B+D→D減法語句(SUBTRACT語句)SUBTRACTBFROMAA–B→ASUBTRACTB,CFROMAA–B–C→ASUBTRACTB,CFROMA,TA–B–C→A,T–B–C→TSUBTRACTB,CFROMAGIVINGXA–B–C→X3.乘法語句(MULTIPLY語句)MULTIPLYABYBA*B→BMULTIPLYABYBGIVINGCA*B→CMULTIPLYABYB,CA*B→B,A*C→C4.除法語句(DIVIDE語句)DIVIDEAINTOBB/A→BDIVIDEAINTOBGIVINGCB/A→CDIVIDEABYBGIVINGCA/B→CDIVIDEABYBGIVINGCREMAINDERDA/B→商C,余數DREMAINDER子句:取得余數。存放余數的數據項可以時數字或數字編輯數據項。余數計算取決于每個操作數的符號和小數點位置。例:77QPICS99V9.77RPICS99V9.DIVIDE3INTO7GIVINGQREMAINDERRQ=2.3R=0.15.計算語句(COMPUTE語句)COMPUTE語句可以進行復雜的四則運算,也可實現指數運算。COMPUTET=(A+B)*C/DCOMPUTET=X**2COMPUTET=1/(1/A+1/B)運算次序:()->單邊運算符+、―->**->*、/->+、-例1:IDENTIFICATIONDIVISION.PROGRAM-IDEX1.ENVIRONMENTDIVISION.DATADIVISION.WORKING-STORAGESECTION.77XPIC9999.77APIC9977BPIC99.77CPIC99.PROCEDUREDIVISION.ACCEPTA.ACCEPTB.ACCEPTC.COMPUTEX=(A+B)/C.DISPLAYX.STOPRUN.6.四舍五入處理(ROUNDER子句)接收項目后邊的ROUNDER短語表示運算產生的數值先進行四舍五入處理再存入接收項目中。對多個接收項目,舍入處理對各個項目獨立進行。ADDA,BTOCROUNDERADDA,B,CTOD,EROUNDER,FROUNDER7.長度溢出處理(ONSIZEERROR短語)結果絕對值大于接收項目最大存儲能力時,會發生SIZEERROR條件。APIC9V9VALUE1.2.BPIC9V9VALUE9.0.01CPIC9V9.MULTIPLYABYBGIVINGCONSIZEERRORDISPLAY’SIZEERROR’.8.帶CORRESPONDING子句的算術運算語句(數據項同名時編寫多條語句的縮寫方法。)算術運算語句中的ADD和SUBTRACT語句除了可以用來使兩個或多個單個的數據項進行運算外,還可以用來使兩個組合項中的對應項進行加,減運算。進行運算的各項必須是數值型初等項。(數據項目不一定要格式相同。數據項的順序也無關緊要。)02A.02B.03A1PIC9(3).03A1PIC99V99.03A2PIC99V99.03A2PIC9V9.03A3PIC9V9.03A3PIC99V99.ADDCORRATOB.三.傳送語句(MOVE語句)MOVE語句用來實現數據的傳送,將一個數據從一個內存域送到另一個內存域。MOVE123TOAMOVEZEROTOBMOVESPACETOCMOVE’COBOL’TOX,Y,Z1.同類型數據間的傳送規則。MOVEATOB其中A為發送項,B為接收項數字型數據之間的傳送,按小數點位置對齊,如發送項長于接收項,則多余位截去,如短于接收項,接收項的空位補零。字母或字符型數據間的傳送,按左端對齊,如發送項長于接收項,則右端多余位截去,如短于接收項,右端補空格。2.編輯傳送。發送項是數字型數據,而接收項是編輯數字型數據,則先將發送項中數據按接收項的描述要求進行編輯,然后再傳送。3.不同類型數據間的傳送規則(1)接收項為數字或數字編輯型,則發送項為數字和數字編輯型或字母數字型。常量ZERO可直接賦值。(2)接收項為字符數據或字符編輯數據,則發送項目可以用任何類別。如果發送項是數字,則必須是無符號整數。4.組合項的傳送MOVE可以一次傳送一個基本項,也可以傳送一組合項或一個記錄。組合項的傳送是將發送項的內容不加轉換地一個字節一個字節地順序傳送到接收項。01A.01B.03A1PIC999.03B1PICX(6).03A2PICXX.03B2.03A3PIC999.05B21PICX(6).03A4PICA(5).05B22PICA(2).03A5PICX(3).03B3PICX(2).5.對應傳送(CORRESPONDING子句)對應傳送即把一個組合項中若干項傳送給另一個組合項中同名的項。如果兩個組合項中包括的項不同,則只傳送同名的項。傳送的兩者間必須有成對的同名數據項,而且這一對中必須至少有一個項是基本項。四.輸入輸出語句1.接收語句(ACCEPT語句)ACCEPT語句從輸入設備讀取數據。有兩種格式:一種是將輸入設備中的少量數據移到程序中,通常通過鍵盤或控制臺;一種是使程序可以取得系統日期和時間。ACCEPT標識符[FROM助憶名]**助憶名應與環境部SPECIAL-NAMES段中的硬件名相關聯。省略時為鍵盤輸入。ACCEPT標識符FROMDATE(6字符)DAY(6字符)DAY-OF-WEEK(1字符)TIME(8字符)2.顯示語句(DISPLAY語句)DISPLAY語句將數據寫入輸出設備。DISPLAY標識符[UPON助憶名][WITHNOADVANCING]**助憶名應與環境部SPECIAL-NAMES段中的硬件名相關聯。省略時為操作員控制臺。如果使用NOADVANCING短語則傳輸最后一個字符后,輸出設備仍然保持原位,使下一條DISPLAY語句在該位置開始輸出數據。否則顯示這個數據后輸出設備復位到下一行。五.轉移語句(GOTO語句)GOTO語句是一個無條件轉移語句,程序執行到此語句,無條件轉到指定的節或段去。A1.ADDATOCONSIZEERRORGOTOA2.A2.STOPRUN.六.字符串連接語句(STRING語句)STRING語句從一個或幾個發送數據項收集字符并將數據合成一個接收數據項。STRINGA,B,CTOD1.DELIMITED(定界短語),用來控制各個發送項的終止位置。STRINGA,B,CDELIMITEDBYSIZEINTODSTRINGA,B,CDELIMITEDBYSPACEINTOD2.POINTER(指針短語),用來指定開始復制的具體字符位置。MOVE3TOTSTRINGA,B,CDELIMITEDBYSIZEINTODPOINTERT.3.OVERFLOW(溢出短語)STRINGA,B,CDELIMITEDBYSIZEINTODONOVERFLOWDISPLAY‘OVERFLOW’NOTONOVERFLOWDISPLAY‘NOTOVERFLOW’END-STRING.注:發送項必須為USAGEDISPLAY數據項;接收項也應為USAGEDISPLAY數據項,不能是編輯數據項或包括JUSTIFIED從句的數據項。若取得的發送項的長度小于接收項,則接收項中沒有復制的字符位置保持不變。七.字符串分解語句(UNSTRING語句)UNSTRING語句取一個發送數據項中的字符并將其放進多個接收數據項。UNSTRINGAINTOB,C,D1.DELIMITED短語UNSTRINGADELIMITEDBYSIZEINTOB,CUNSTRINGADELIMITEDBY’T’INTOB,CUNSTRINGADELIMITEDBYALL’’INTOB,CUNSTRINGADELIMITEDBYALLSPACEOR’.’INTOB,C2.COUNT短語,將已發送的字符個數記入用戶定義的記數器。UNSTRINGADELIMITEDBY’T’INTOBCOUNTINW.3.DELIMITER短語,定界符存儲短語。UNSTRINGADELIMITEDBY’T’ORALL’’OR’R’INTOBDELIMITERINQCDELIMITERINPDEND-UNSTRING.4.POINTER短語,指定從發送項某一指定位置開始傳送。MOVE5TOTUNSTRINGAINTOBWITHPOINTERT.5.TALLYING短語,接收項記數短語,用來記錄實際接收傳送的接收項項數。UNSTRINGAINTOB,C,DTALLYINGINN.(N=3)6.OVERFLOW短語注:如果發送項的長度大于接收項的總長度,則填完最后一個接收項時,語句結束并發生溢出。如果發送項的長度小于接收項的總長度或遇到分隔字符串使UNSTRING語句結束,則接收項中沒有復制到的字符位置保持不變。八.檢測語句(INSPECT語句)INSPECT語句檢查數據項以計算該項目中某個字符串出現的次數或用另一個字符串替換該字符串。1.INSPECTTALLYING格式,用來統計滿足某種條件的字符的個數。(檢查方向由左向右。對TALLYING后的變量要由使用者負責初始化到適當數值,不能自動初始化到零。)MOVE’AT**F,***,T’TOAINSPECTATALLYINGNFORALL’*’AFTER’T’(N=5)ALL檢查匹配的字符或字符串個數。INSPECTATALLYINGNFORLEADING’*’AFTER’T’(N=2)INSPECTATALLYINGNFORLEADING’*’(N=0)--LEADING只計算開頭的匹配,其他都不算匹配。INSPECTATALLYINGNFORCHARACTERSAFTER’T’(N=9)CHARACTERS計算所有字符,任何字符都算匹配。INSPECTATALLYINGNFORALL’*’,ALL’,’AFTER’T’(N=7)--AFTER設置開始比較的點,若沒發現指定的開始字符,則不進行比較。INSPECTATALLYINGNFORALL’*’BEFORE’,’(N=2)BEFORE指定停止比較中斷,若沒發現指定的字符,則效果如同沒有指定BEFORE.注意:如果在同一條INSPECTTALLYING語句中組合CHARACTERS、ALL、LEADING,則檢查一個字符進行,連續采用每個檢查標準,檢查順序按INSPECT語句中指定的順序。找到匹配后,當前位置移動,比較在次從第一個操作數開始。即是說,第一個比較成功后,指針移動到下一個字符,再從第一個比較做起。例:77CSPICX(9)VALUE‘REELWHEEL’.77COUNT-0PIC9(1).77COUNT-1PIC9(1).77COUNT-2PIC9(1).MOVE0TOCOUNT-0,COUNT-1,COUNT-2.INSPECTCSTALLYINGCOUNT-0FORALL‘E’,COUNT-1FORLEADING‘W’AFTER‘L’COUNT-2FORCHARACTERS.(COUNT-0=4,COUNT-1=1,COUNT-2=4)2.INSPECTREPLACING格式,用指定的字符代替另一些指定的字符。MOVE’A000.12B’TOAINSPECTAREPLACINGALL’0’BYSPACEALL’.’BY’,’ALL’A’BY’B’INSPECTAREPLACINGFIRST’0’BYSPACEBEFORE’.’--FIRST短語時,只把第一個出現的字符當作匹配。組合INSPECTTALLYING和REPLACING格式(等于INSPECT語句順序編寫,先用TALLYING選,再用REPLACING選項。)INSPECTATALLYINGNFORALL’L’REPLACINGLEADING’A’BY’E’AFTER’L’INSPECTCONVERTING格式,是INSPECTREPLACING語句縮寫。(等同于用一系列ALL選項。對象與目標應當長度相同,且對象中字符不能重復。)INSPECTACONVERTING’EL’TO’AX’===〉INSPECTAREPLACINGALL‘E’BY‘A’,REPLACINGALL‘L’BY‘X’.九.條件語句(IF語句)IF條件THEN語句組1ELSE語句組2END-IF1.關系表達式條件關系運算符:>,<,=,>=,<=,NOT>,NOT<,NOT=,NOT>=,NOT<=IFA>=ZERO…IFBNOTEQUALTO1…IF(0.03*C)<D…IFNAMENOT=’WANG’…IFSTU=SPACE…2.符號條件符號條件測試算術表達式的代數值大于,小于或等于0。數據名或IS[NOT]POSITIVE算術表達式NEGATIVEZEROIFAISPOSITIVE…IFBISNOTNEGATIVE…IF(A+B)ISZERO…3.類型條件類型條件測試數據項的類型是否完全由屬于某個類或集合的字符組成。標識符IS[NOT]NUMERICALPHABETICALPHABETIC-LOWERALPHABETIC-UPPERClass-nameENVIRONMENTDIVISION.CONFIGURATIONSECTION.SPECIAL-NAMES.CLASSREAL-NUMBERIS’0123456789+-*/’.……PROCEDUREDIVISION.IFAISREAL-NUMBER…4.條件名條件一個基本項只能根據某些條件取預定的值,或只能在一個預定的范圍中取值,則這個變量稱條件變量。用來表示條件變量當前值的名字叫條件名,用層號88,緊跟在條件變量之后說明。77XPIC9(6).88X1VALUE0THRU99.88X2VALUE100THRU999.88X3VALUE1000THRU4999.88X4VLAUE5000THRU100000.……IFX1MOVE0.03TOR.IFX2MOVE0.04TOR.IFX3MOVE0.05TOR.IFX4MOVE0.06TOR.5.復合條件用邏輯操作符(AND,OR,NOT)和括號進行組合,可以構成復合條件。IFX>0ANDX<100…IFX=0ORX=1十.PERFORM語句PERFORM語句使控制傳遞另一過程,并在執行后返回。它相當于子程序調用,只是不傳遞參數。1.簡單PERFORM格式PERFORM過程名1[THRU(THROUGH)過程名2]過程部中的節名,段名稱為過程名。例1:A.DISPLAY‘A’MOVE‘B’TOT.PERFORMB.STOPRUN.DISPLAYT.MOVE‘C’TOT.PERFORMC.C.DISPLAYT.例2:PERFORMATHRUCA.……B.……C.……例3:PROCEDUREDIVISION.PERFORMA00.PERFORMB00.PERFORMC00.STOPRUN.A00SECTION.A00-START.……A00-END.EXIT2.PERFORMTIMES格式PERFORMTIMES格式與簡單PERFORM格式相似,只是指定的過程組不是執行一次,而是執行指定的次數。PERFORM過程名1[THRU過程名2]整數TIMES例1:A.MOVE5TON.MOVE1TOM.PERFORMA1NTIMES.DISPLAYM.STOPRUN.A1.MULTIPLYNBYMSUBTRACT1FROMN.上例中的PERFORM部分也可寫成:PERFORMNTIMESMULTIPLYNBYMSUBTRACT1FROMNEND-PERFORM.3.PERFORMUNTIL格式PERFORMUNTIL格式重復執行指定的過程組,直到條件值變為真。PERFORM過程名1[THRU過程名2]UNTIL條件注意:在執行PERFORM語句時,先判斷指定的條件是否為真,若為假則執行所指定的語句序列,如果一開始條件就為真,則一次也不執行。MOVE0TOTMOVE1TONPERFORMUNTILN>30ADDNTOTADD1TONEND-PERFORM.4.PERFORMVARYING格式PERFORMVARYING格式相當于C語言中的FOR語句。多個計數器(AFTER短語)等于嵌套FOR語句。PERFORM過程名1[THRU過程名2]VARYING標識符1FROM標識符2BY標識符3UNTIL條件1[AFTER標識符4FROM標識符5BY標識符6UNTIL條件2]MOVE0TOTPERFORMVARYINGNFROM1BY1UNTILN>30ADDNTOTEND-PERFORMPERFORMVARYINGIFROM1BY1UNTILI>9AFTERJFROM1BY1UNTILJ>9DISPLAYP=I*JEND-PERFORM.5.出口語句(EXIT語句)EXIT語句提供了一組過程的公共出口,或者說它指出了被調用過程的邏輯終點。十一.多分支選擇語句(EVALUATE語句)EVALUATE語句根據一列表達式的值,從一大組語句中選擇一組要執行的語句,相當于CASE語句。EVALUATENET-INCOMEWHEN0THRU12500MOVE0TOTAX-RATEWHEN12501THRU28000MOVE0.15TOTAX-RATEWHEN28001THRU50000MOVE0.28TOTAX-RATEWHENOTHERMOVE0.33TOTAX-RATEEND-EVALUATE十二.停止語句(STOP語句)STOPRUN格式停止程序,關閉任何打開的文件,這是COBOL程序正常終止的方式。表的建立和查找COBOL語言中的表(TABLE)相當于其它高級語言中的數組(ARRAY)。一.表定義生成表時,在數據部的數據描述項中使用OCCURS子句。1.定長表OCCURSinteger-1TIMESOCCURS從句生成定長數據項表格,數據項個數就是指定的個數,引用表格的下標取值為1到integer-1之間。PRODUCT-RECORD.03PRODUCTOCCURS20TIMES.05PRODUCTIONPIC9(6).05SALESPIC9(6).05HANDPIC9(6).**PRODUCT是表的名字。2.變長表格OCCURS整數1TO整數2TIMESDEPENDINGON數據名1OCCURS從句生成變長表格,數據項個數可變。integer-1指定最少個數,可以為0,integer-2指定最大個數。data-name-2應為整數,確定每次引用表格時數據項的實際個數,取值為integer-1和integer-2之間。01STUDENT-SCORE-RECORD.03NAMEPICX(10).03QTY-OF-COURSEPIC99.03SCOREPIC9(3)OCCURS1TO10TIMESDEPENDINGONQTY-OF-COURSE.3.多維表格發生多維表格時,用從屬于帶OCCURS從句的數據項的另一個OCCURS從句定義數據項。允許最多7維。01PRODUCT-RECORD.03PRODUCTOCCURS20TIMES.05QUANTITYPIC9(6)OCCURS3TIMES.PRODUCT是一維表,QUANTITY是二維表。有關說明(1)OCCURS后面只能為正整數。(2)OCCURS從句不能用于01層和77層。(表只能定義在記錄內部。77層是孤立的數據項,不和其他數據發生組合關系。)(3)如果用OCCURS來描述一個基本項,則重復出現的是這個基本項。如果用OCCURS來描述一個組合項,則重復出現的是這個組合項。(4)在COBOL中表元素可以允許為組合項。而且在建立一個多維表的同時,也建立了一維表。(5)只有當OCCURS所說明的數據是基本項時,才能在該數據項的描述中使用PIC從句。A.02BPICX(20)OCCURS5.錯誤03CPICX(20).二.表元素的引用表必須先在數據部定義,才能在過程部引用。各個表元素是按一定規律在內存中順序存放的(在內存中按行排列,如A(1,1)、A(1,2)、A(2,1)、A(2,2)),因此,在引用時必須指出表名和這個元素在表中的位置。例PRODUCT(2)。如果是二維表,在括弧中要用兩個下標分別表示此元素在每一維中的位置。例QUANTITY(3,2)。注:下標只能是整常數或具有整型值的數據名。TABLE.02BOCCURS8.03C1PICX(8).03C2PICX(2).MOVESPACETOC1OFB(2).–表元素應出現在限定詞OF或IN的后面。三.表格的初始化1.對整個表格賦初值。01TABLEVALUEISZERO.03APIC9(3)OCCURS20TIMES.01TABLE.03APIC9(3)OCCURS20TIMESVALUEISZERO.TABLE.03AOCCURS20TIMESVALUESPACES.05NAMEPICX(10).05MAILPICX(20).對帶OCCURS從句的數據項指定VALUE值。01TABLE.03AOCCURS1TO20DEPENDINGONCOUNTVALUESPACES.05NAMEPICX(10).05MAILPICX(20).對變長
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 購銷合同范文
- 建筑材料采購合同協議書
- 勞動合同解除談話筆錄1
- 企業云計算資源使用合作協議
- 數字化合作框架下的遠程工作協作合同
- 配電網升級改造合同
- 環保工程服務合同:全面解決方案
- 合同生命周期管理:物業財務關鍵制度
- 圖書館目視化管理
- 拆除工程中的文物保護與遷移策略考核試卷
- 冷鏈物流成本控制-全面剖析
- 有關商品房預售合同樣本合同樣本7篇
- 2025年高考物理復習備考策略講座
- 管理學基礎-形考任務三-國開-參考資料
- 2024-2025學年北師大版七年級數學上冊期末復習壓軸題12個(84題)含答案
- 2025年3月版安全環境職業健康法律法規標準文件清單
- 2025年河南交通職業技術學院單招職業技能測試題庫審定版
- T∕CEC 442-2021 直流電纜載流量計算公式
- 電影《白日夢想家》課件
- 蠟療技術PPT課件
- 友商S6實施五部曲銷售流程倉庫管理流
評論
0/150
提交評論