COBOL學習之一:HELLO WORLD 的編譯與執行
一、第一個HELLO WORLD
程式寫好了,很簡單,問題就在如何用JCL去提交編譯COBOL程式。出現了N多錯誤。。
又寫了個JCL,提交了下:
這次比上次好多了,至少,JCL沒有錯誤。找了下,問題在這裡:
意思應該是條件句導致部分JCL沒有執行。看看程式碼
把CON註釋掉,試試,還有錯誤:
問了老師,大悟,原來意思是,處理COBOL和LKED時出現錯誤,?分類檢視(給忘了。。。)
錯誤就在這兩個裡面了,進去揪出來!
這裡,COBOL的分列到底是如何規定的?(這個問題一定要搞清楚)
經過幾番修改,語法錯誤終於沒有了。一個小小的HELLO WORLD竟然出現這麼多錯誤,真暈。 DISPLAY
到此,成功編譯!下面,探討如何執行COBOL生成的LOAD。
在CN0003.COBOL.LOAD下面,看看HELLO 生成的LOAD
OK!和老師看到的結果一樣。
總結下前面的程式碼:
DATALIST如下:
編譯COBOL的JCL:
//CN0003E JOB (CBLCL),'B.C.L',CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1),<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
//NOTIFY=&SYSUID
//*****************************************************************
//*JOB TO COMPILE AND LINK-EDIT COBOL PROGRAM
//*****************************************************************
//COBOLEXECPGM=IGYCRCTL,REGION=2048K
//STEPLIBDDDSNAME=COBOL.V3R1.SIGYCOMP,
//DISP=SHR
//SYSPRINT DDSYSOUT=*
//SYSLINDDDSNAME=&&LOADSET,UNIT=SYSDA,
//DISP=(MOD,PASS),SPACE=(TRK,(3,3)),
//DCB=(BLKSIZE=3200)
//SYSINDDDSN=CN0003.COBOL.SOURCE(HELLO),DISP=SHR
//SYSUT1DDUNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT2DDUNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT3DDUNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT4DDUNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT5DDUNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT6DDUNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT7DDUNIT=SYSDA,SPACE=(CYL,(1,1))
//*LKEDEXEC PGM=HEWL,COND=(8,LT,COBOL),REGION=1024K
//LKEDEXEC PGM=HEWL,REGION=1024K
//SYSLIBDDDSNAME=CEE.SCEELKED,
//DISP=SHR
//SYSPRINT DDSYSOUT=*
//SYSLINDDDSNAME=&&LOADSET,DISP=(OLD,DELETE)
//DDDDNAME=SYSIN
//SYSLMODDDDSNAME=CN0003.COBOL.LOAD,
//SPACE=(TRK,(10,10,1)),
//UNIT=SYSDA,DISP=(MOD,PASS)
//SYSUT1DDUNIT=SYSDA,SPACE=(TRK,(10,10))
//LKED.SYSINDD *
NAME HELLO(R)
/*
//
//GOCOBOLEXEC PGM=HELLO
//STEPLIBDD DSN=CN0003.COBOL.LOAD,DISP=SHR
//
老師提供的JCL,修改了多次。。。
老師一看到我的COBOL程式就說,寫錯了。。。汗。。修改了下,格式貼上來
PROCEDURE DIVISION的語句,好像是不可以頂齊PROCEDURE 寫,會出錯。。。
二、執行編譯好的COBOL程式
執行編譯好的COBOL程式,需要寫一個JCL來呼叫生成的LOAD檔案:
SUB,提交:
程式執行結果自然在SYSOUT中,S進去,看到了期待已久的結果:
到此,結束!
Oh Yeah!