發展歷程
COBOL(CommonBusinessOrientedLanguage)是第一個廣泛使用的高級程式語言。在企業管理中,數值計算並不複雜,但數據處理信息量卻很大。為專門解決經企管理問題,1959年5月,五角大樓委託格雷斯·霍波(G.Hopper)博士領導一個委員會並由RearAdmiralGraceHopper公司主持開發,並於1961年由美國數據系統語言協會公布。經不斷修改、豐富完善和標準化,已發展為多種版本。
COBOL重視數據項和輸入/輸出記錄的處理,對具有大量數據的檔案提供了簡單的處理方式。從名字可以看出,它主要用於解決商業和企業管理等領域的大量數據處理問題,又稱為企業管理語言、數據處理語言等。Cobol語言的研製始於50年代末,當時計算機的生產已進入第二代,計算機套用領域開始從數值計算擴大到數據處理。商業和企業事務管理中需要進行處理的數據量急劇增加,迫切需要有適用於這個領域的程式設計語言,以提高編製程序的質量和速度。Cobol語言就是在這種社會背景下應運而生的。也就是說,Cobol已經年過半百了。Cobol正式發布於1960年4月,稱為Cobol-60。現在最新的版本應該是Cobol-2002了,而且還在不斷改進中,未來的Cobol將支持XML等Web時代的新技術。換言之,Cobol還將繼續發展與套用,但與C語言或FORTRAN語言相比,COBOL的數值運算、邏輯運算能力比較弱。
1959年,美國國防部召開了一個有政府機關、企業、計算機廠商參加的會議,大家認為有必要設計一種數據處理專用的語言,這就是著名的數據系統語言會議CODASYL(CongferenceonDataSystemsLanguages)。1959年12月出現了第一個COBOL語言文本,並於1960年4月正式發表,因此也被稱為COBOL-60。1968年美國國家標準委員會ANSI又通過了新的標準ANSICOBOLX.3.23-1968。1972年國際標準化組織ISO將其作為ISOCOBOL-72。1974年ANSI對COBOL-68作出了修訂擴充,形成了ANSICOBOLX3.23-1974,隨後1978年ISO採用其形成ISOCOBOL-78Monday,2004-09-06ANG="ZH-CN">又提出了ANSIX3.23-85,增加了很多結構化程式設計的內容,ISO標準ISO1989:1985也採用了該標準。COBOL標準還在不斷地改進和完善,最新的標準COBOL2002主體已經於2002年12月出版,其他部分還在不斷地完善之中,具體內容請參考NCITS和COBOLStandards。
語言特點
COBOL是一種面向數據處理的、面向檔案的、面向過程(POL)的高級程式語言,是一種功能很強而又極為冗長的語言。
COBOL適合於具有循環處理周期的環境(例如列印工資支票)以及數據操縱量相當大的環境。COBOL主要套用於商業數據處理領域,對各種類型的數據進行收集、存儲、傳送、分類、排序、計算及列印報表、輸出圖象是它的強項。
COBOL語法與英文很接近,即使不懂電腦的人也能看懂程式。
強大的檔案處理功能,大量的數據通常以檔案的形式存儲在磁碟上。
科學計算。
未來的COBOL將支持XML等Web時代的新技術。
重要性
經過40多年的不斷修改、豐富完善和標準化,COBOL已發展為多種版本的龐大語言,在財會工作、統計報表、計畫編制、情報檢索、人事管理等數據管理及商業數據處理領域,都有著廣泛的套用。
COBOL的重要性可以用這句話來描述:世界上70%的數據都是用COBOL語言處理的,並且90%的ATM事務處理用的都是COBOL語言。每天線上處理的COBOL事務有300億次。500強中有492家(包括全部的100強)使用了COBOL語言,目前在COBOL方面的投資已經超過3萬億美元,,據稱用COBOL書寫的程式超過了2000億行,並且以每年大約50億行代碼的速度在增長。
由於COBOL在商業領域的雄厚基礎,而且COBOL主要是套用於銀行、金融和會計行業等非常重要的商業數據處理領域。所以,即使對於具有相當經驗的IT公司來說,重新編寫COBOL語言的可靠的套用軟體也是不實際或是從商業角度上並不可行的,而且還要花上很長的時間,只要大型機存在,COBOL就不會消失,即使是對電腦界產生巨大影響的“千年蟲”(Y2K)也沒有改變COBOL的命運。
商業語言
COBOL(面向商業的通用語言,又稱為企業管理語言、數據處理語言等,Common Business Oriented Language)是最早的高級程式語言之一,是世界上第一個商用語言。由COBOL之母Grace Hopper以Flow-Matic為基礎開發創建。
COBOL是一種面向數據處理的、面向檔案的、面向過程(POL)的高級程式語言,是一種功能很強而又極為冗長的語言。
COBOL適合於具有循環處理周期的環境(例如列印工資支票)以及數據操縱量相當大的環境。COBOL主要套用於商業數據處理領域,對各種類型的數據進行 收集、存儲、傳送、分類、排序、計算及列印報表、輸出圖象是它的強項。COBOL語法與英文很接近,即使不懂電腦的人也能看懂程式。強大的檔案處理功能,大量的數據通常以檔案的形式存儲在磁碟上。未來的COBOL將支持XML等Web時代的新技術。
套用領域
作為一種元老級的高級程式語言,COBOL擁有龐大的用戶群和代碼,據稱用COBOL書寫的程式超過了2000億行。另有調查發現世界上目前使用的商業套用軟體之中的百分之七十是用COBOL代碼編寫的,並且以每年大約五十億行代碼的速度在增長。看來,歷史賦予了COBOL語言特殊的使命。另外,只要大型機存在,其上就還要運行COBOL程式,而且很多資深的程式設計師已經習慣於COBOL,加入大型機環境的新程式設計師也不得不開始使用COBOL。其實COBOL也有自身的一些優點,比如它對數據的顯示格式有較強的控制。另外,我想最重要的是,即使對於具有相當經驗的IT公司來說,重新編寫可靠的套用軟體也是不實際或是從商業角度上並不可行的,而且還要花上很長的時間。
如上介紹,Cobol主要是套用在商業數據處理領域。其中占最大百分比的是銀行、金融和會計行業,其次是ComputerVAR/Retail/Consulting行業,這是美國的調查資料。Cobol在中國的套用應該也差不多(或更少)。
編輯器
由於COBOL最初是用於主機系統,所以它和主機系統聯繫得非常緊密。主流的主機系統,例如IBM的大型機、中型機等都配備了相應的COBOL編譯程式,例如VS COBOL II等。微機的廣泛使用也對主機編程產生了一定的影響,比如它擁有漂亮的圖形界面,不少編譯器廠家也推出了微機平台上的COBOL編譯器產品,其中比較著名的有Fujitsu Power COBOL,Acu Cobol等。網上有一個Fujitsu COBOLV3,其編程界面類似於微機上常見的VisualBasic、VisualC等,不僅提供了GUI界面,也內置了許多常見的控制項,當然其功能比起VB、VC還是差了不少,有興趣者可以下載去試用一下。另外,還有一個COBOL編輯器叫BlueMorpho IDE/閃蝶IDE ,支持大型機平台上COBOL,JCL,SQL,PL1,CICS代碼的線上編輯。除IDE編輯功能外,還支持COBOL代碼分析,COBOL系統業務邏抽取和COBOL代碼規範質量檢測等功能。
在Windows上開發的人都應該覺得很幸運,它那友好的界面就實在能改善開發者的心情,提高開發的效率。想想在DOS和UNIX等下面的黑屏環境,工作的心情實在好不起來。要是跟蹤一段代碼,簡陋的調試環境真讓人卻步。主機環境既然不那么友好,調試環境也就可以想像了。當然了,如果捨得花錢,還是能買到湊合的調試環境的。即使沒有那么多的投資,CICS也算是一個不錯的東西,畢竟它還支持對其自己命令的調試。
程式結構
COBOL程式由4部(DIVISION)組成:
IDENTIFICATION DIVISION.(標識部)
主要用來指定源程式名字,也可以寫入其他用作備忘的某些信息(如日期、作者等)。
ENVIRONMENT DIVISION.(環境部)
主要用於指出程式中用到的數據檔案名稱與計算機系統的設備的對應關係,即把某一檔案名稱與一個外部設備聯繫起來。
DATA DIVISION.(數據部)
程式中所用到的全部數據(包括輸入輸出的數據和中間數據)都應在數據部中說明它們的類型和所占記憶體情況。
PROCEDURE DIVISION.(過程部)
用來給出程式要執行的指令,使計算機產生相應的操作,例如進行數學運算。
備註:
部(Division)一部可包括若干節
節(Section)一節可包含若干段
段(Paragraph)一段可包含若干句子
句子(Sentence)一個句子可包含若干語句
語句(Statement)制定計算機完成一定的操作
子句(Clause)制定完成某一方面的功能
程式舉例
IDENTIFICATION DIVISION. 標識部
PROGRAM-ID. SAMPLE4.
AUTHOR. QXLU (WISTRON DALIAN).
DATE-WRITTEN. 04-07-07.
DATE-COMPILED. 04-07-07.
*
ENVIRONMENT DIVISION. 環境部
*
DATA DIVISION. 數據部
WORKING-STORAGE SECTION.
01 A PIC X(4). PIC子句進行數據定義
01 B PIC X(4).
01 C PIC X(4).
01 D PIC X(8).
*
PROCEDURE DIVISION. 過程部
*
MOVE 'FGH ' TO A. 賦值給A
MOVE 'KLM ' TO B.
MOVE 'XYZ ' TO C.
MOVE SPACE TO D.
STRING A, B, C DELIMITED BY SPACE INTO D
ON OVERFLOW DISPLAY 'OVERFLOW'.
DISPLAY 'A = ' A. 列印命令
DISPLAY 'B = ' B.
DISPLAY 'C = ' C.
DISPLAY 'D = ' D.
*
STOP RUN. 程式結束標識
顯示如下:
OVERFLOW
A = FGH
B = KLM
C = XYZ
D = FGHKLMXY
常見問題解析
COBOL問題一
在COBOL中我是否應該編程(如果存在IF FILE STATUS = 00)出現READ/WRITE後,檢查FILE STATUS,還是作業系統會自己處理?
請務必在每次輸入/輸出(I/O)操作後,檢查檔案狀態。如果錯誤很嚴重,作業系統會中斷並異常終止你的程式。否則,如果程式在I/O之後收到控制,程式需要知道發生了什麼事情才能做出適當的反應。
COBOL問題二
在COBOL中有了可以在生產之前自動清理腳本的工具,是否還需要編譯?
COBOL編譯器可以處理大量最佳化,並完成一些開發工具無法執行或做得不好的檢查。但編譯有時需要花費很長時間。一些應用程式無法通過嚴謹的最佳化、語法檢查和語義審查中獲得性能提升,但對於處理大數據或線上交易的應用程式來說,這類附加步驟是十分有必要的。
COBOl問題三
COBOL是否有類似於ARCH與TUNE的選項?
ARCH與TUNE曾經是IBM Language Environment(LE)編譯器專門針對C++程式語言的編輯器選項。IBM將其從LE最佳化開放到COBOL與PL/I,所以你現在可以在COBOL應用程式代碼上使用ARCH與TUNE了。
COBOL問題四
在COBOL中,我們IT組織有一個遺留的重要套用基於COBOL。COBOL技能並不是最高優先權,因為其他業務我們已經遷移到JAVA或把遺留業務替換成第三方軟體即服務應用程式。我們要怎么做才能確保這個無法轉換的套用仍然有效?
針對舊COBOL程式有兩種選擇,但沒有一個是完全無痛的。根據技能、時限與底層代碼,可以手動重寫COBOL到C/C++遺留代碼,並自動轉換或重新將遺留系統遷移到新平台。
COBOL問題五
在COBOL中,有沒有方法可以替換某個檔案中所有欄位的頭兩個字元?我有一個COPY DDS檔案中,欄位含有TRxxxx(其中每個欄位的'xxxx'不同)。我想把'TR'替換為'SP'。
目前沒有好的方法只替換COPY DDS語句中的部分字元--或者替換已有的“前綴”。要讓名字相同,需要對兩個檔案使用相同COPY DDS語句。如果記錄格式結構有所不同,可能會希望通過源成員複製一份檔案,並通過編輯器修改前綴字元,例如Entry Utility (SEU)。使用修改後的COPY成員,而不是COPY DDS成員。
COBOL問題六
在COBOL中,我在這18年間都沒用過AS/400。我可以開始學習SEU,但不記得下一步要怎么做。我要如何才能插入代碼行?
你需要重新熟悉COBOL基礎。跳轉到指定行數然後輸入'IP?'可以顯示所有行提示符類型。點擊F1後再點擊F2會顯示每個提示符的幫助描述。諸如IBM的Rational Developer工具有助於我進行可視化開發,還有報表開發工具可以自己更高效簡單的開展編碼工作。另外,如果你長期使用AS/400,可以嘗試一些不會拖慢程式性能的技術和代碼。