RPG開(kāi)發(fā)入門(mén)手冊(cè)范本_第1頁(yè)
RPG開(kāi)發(fā)入門(mén)手冊(cè)范本_第2頁(yè)
RPG開(kāi)發(fā)入門(mén)手冊(cè)范本_第3頁(yè)
RPG開(kāi)發(fā)入門(mén)手冊(cè)范本_第4頁(yè)
RPG開(kāi)發(fā)入門(mén)手冊(cè)范本_第5頁(yè)
已閱讀5頁(yè),還剩53頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1 簡(jiǎn)單說(shuō)明32 程序代碼行的編寫(xiě)32.1 最簡(jiǎn)單的RPGLEO序32.2 舉例準(zhǔn)備32.3 簡(jiǎn)單的程序流程42.4 常見(jiàn)的程序流程52.5 F行說(shuō)明52.5.1 容說(shuō)明52.5.2 常用例子82.5.3 補(bǔ)充說(shuō)明92.6 D行說(shuō)明92.6.1 容說(shuō)明102.6.2 常用例子122.6.3 補(bǔ)充說(shuō)明132.7 入口參數(shù)142.8 C行說(shuō)明162.8.1 寫(xiě)在前面162.8.2 容說(shuō)明162.8.3 ILE操作碼分類(lèi):172.8.4 ILE操作碼182.8.4.1 A-C182.8.4.2 D-E262.8.4.3 F-N312.8.4.4 O-R372.8.4.5 S-Z413 和程序相關(guān)的數(shù)

2、據(jù)庫(kù)知識(shí)473.1 LF(邏輯文件)473.1.1 邏輯文件概念473.1.2 有關(guān)編譯的問(wèn)題錯(cuò)誤!未定義書(shū)簽。3.1.3 邏輯文件對(duì)效率的影響483.2 MEMBE.R493.3 游標(biāo)493.3.1 游標(biāo)的概念493.3.2 不同操作碼對(duì)應(yīng)的游標(biāo)的處理503.3.3 “有且僅有”的游標(biāo)503.3.4 LOVALHIVAL對(duì)應(yīng)的游標(biāo)操作503.4 事務(wù)處理-COMMIT513.4.1 概念描述513.4.2 使用方法523.4.3 注意事項(xiàng)523.5 關(guān)于鎖表的問(wèn)題LCKW534 DEBU調(diào)試以及常見(jiàn)出錯(cuò)信息534.1 寫(xiě)在前面534.2 常規(guī)用法544.2.1 程序編譯544.2.2 執(zhí)行D

3、EBUGS令544.2.3 運(yùn)行程序554.2.4 在DEBUG!式中進(jìn)行調(diào)試554.2.5 跟蹤被當(dāng)前程序調(diào)用的程序554.2.6 一定要退出DEBUG!式564.2.7 補(bǔ)充564.3 跟蹤批處理程序(Fromqingzhou)564.4 常見(jiàn)的出錯(cuò)信息574.4.1 編譯程序時(shí)的出錯(cuò)信息574.4.2 運(yùn)行時(shí)的出錯(cuò)信息595 CL、CMD595.1 CL程序595.1.1 基本認(rèn)識(shí)595.1.2 CL程序的常用語(yǔ)法及命令:605.1.3 不常用的語(yǔ)法625.2 CMD636 屏幕文件及使用647 其它647.1 報(bào)表打印687.2 SAVF備份與恢復(fù)737.3 菜單-MENU747.4

4、開(kāi)發(fā)時(shí)常用的命令747.5 一點(diǎn)想法771簡(jiǎn)單說(shuō)明部交流、或可作培訓(xùn)使用。對(duì)用戶(hù)作如下假定:1、能COPY修改、編譯源代碼(RPGLECLP),并能運(yùn)行編譯后的程序2、能COPY修改、編譯文件(PRLF、PRTRDSPF;3、對(duì)數(shù)據(jù)文件(PF)有簡(jiǎn)單白認(rèn)識(shí)(FIELDRECORDPF),并知道LF與PF的對(duì)應(yīng)關(guān)系。2程序代碼行的編寫(xiě)7.6 最簡(jiǎn)單的RPGLEE1序?yàn)楸阌诶斫?,這里寫(xiě)一個(gè)最簡(jiǎn)單的RPGLEg 序CL0N01Facton+Opcode&ExtFactor2+Result+Len+D+HiLoEq*Beginningofdata*0001.00 C 'HELLO WO

5、RLD'DSPLYRETURN0002.00C*Endofdata*這個(gè)程序編譯成功,并調(diào)用(CALL程序名),就是在屏幕上反白顯示“HELLOWORL葉樣。(其中,綠色字樣,是系統(tǒng)自動(dòng)顯示的,下同)與自由風(fēng)格的C語(yǔ)言不同,RPGL即的編碼,是有一定的格式,如果寫(xiě)錯(cuò),將會(huì)在當(dāng)前代碼行上高亮反綠顯示。初學(xué)者如果不太清楚從何處開(kāi)始下手,可以使用“F4”鍵查看(F4鍵只有用2進(jìn)入的編輯狀態(tài)才有效,用5進(jìn)入的查看狀態(tài)是無(wú)效的)LevelN01Factor1OperationFactor2Result'HELLOWORLD'DSPLYDecimalLengthPositionsH

6、ILOEQComment關(guān)于每一項(xiàng)所對(duì)應(yīng)的容代表什么意思,該如何填寫(xiě),即如何寫(xiě)程序,將會(huì)在下面的具體講解。7.7 舉例準(zhǔn)備列出表名,字段,以方便下面的舉例。假設(shè)有PF文件叫PFFHS文件的記錄格式叫FMTFHS每條記錄,都是由FHS01FHS02FHS03三個(gè)字段組成,每個(gè)字段都是兩位長(zhǎng)的字符型變量。邏輯文件PFFHSL1的鍵值為FHS01邏輯文件PFFHSL前鍵值為FHS02邏輯文件PFFHSL對(duì)鍵值為FHS01FHS02注:文件的記錄格式,可以理解為給這個(gè)文件整條記錄起的一個(gè)名字;或者是說(shuō)將每條記錄視都視做一個(gè)類(lèi)型相同大變量,然后給這個(gè)大變量起的名字。所以文件的記錄格式信息中,包含有一條記

7、錄由多少個(gè)字段組成,總計(jì)長(zhǎng)度是多少這樣的信息。文件的記錄格式,與各個(gè)字段同時(shí)定義。(寫(xiě)文件的源碼時(shí))文件的記錄格式在RPGLE勺程序中,不能與文件名相同。7.8 簡(jiǎn)單的程序流程為方便起見(jiàn),系統(tǒng)自動(dòng)顯示的就不再貼出來(lái)了,只貼代碼段。FPFFHS UFCCCCCE READ EVAL UPDATE SETON RETURNDISKFMTFHSFHS01=” 01 ”FMTFHSLR這個(gè)程序的意思,是說(shuō)讀PFFHS這個(gè)文件,然后將讀到白第一條記錄中的FHS01這個(gè)字段的值修改為“01”。“SETONLR”,LR的位置可在HI、LOEQ中任選一處。意思是指將打開(kāi)指示器*INLR,即賦值使指示器*INL

8、R的值等于1。等價(jià)于“EVAL*INLR=1”,意思是強(qiáng)制將存中的數(shù)據(jù)寫(xiě)到磁盤(pán)中。(基于效率因素,系統(tǒng)在修改文件時(shí),會(huì)先將修改的結(jié)果先放在存中,在同一程序中,讀取數(shù)據(jù)也是先從存中查詢(xún)。)LR,取自是LastRecordRETURN表示程序結(jié)束,在后面“操作碼”一節(jié)中,會(huì)有講述。如果不太明白,就記住CSETONLRCRETURN或CEVAL*INLR=1CRETURN這兩句話(huà)加在一起,表示程序結(jié)束就可以了。從這個(gè)程序中,我們可以看到,RPGLE勺程序,大致上可以分為兩個(gè)部分:1、聲明、定義部分:聲明程序中使用到的文件(F行),定義程序中使用的變量(D行)2、程序運(yùn)行部分:即C行,也就是程序段。在

9、RPGLElil序中,F(xiàn)行必須在D行前面,D行必須在C行前面。程序執(zhí)行的起始順序,將從定義部分之后,第一個(gè)C行開(kāi)始,順序向下執(zhí)行。程序中的F行、D行都不是必須項(xiàng),一個(gè)程序可以沒(méi)有F行(如僅完成計(jì)算功能的公共函數(shù),比如計(jì)算利息),也可以沒(méi)有D行(沒(méi)有需要特別定義的變量,或者所有變量都在C行進(jìn)行定義),但不應(yīng)該沒(méi)有C行,因?yàn)镕行與D行都屬于非執(zhí)行行,是起定義作用;C行是執(zhí)行行。沒(méi)有C行的程序,是無(wú)執(zhí)行意義的。2.4常見(jiàn)的程序流程FPFFHSUFEDISK/聲明文件PFFHSDLSFLD01S2/定義臨時(shí)變量LSFLD01CEVALLSFLD01=01/給變量LSFLD01賦值CEXSRSUB#UP

10、D/執(zhí)行子過(guò)程SUB#UPDCEVALLSFLD02=02/給變量LSFLD02賦值CEXSRSUB#UPD/執(zhí)行子過(guò)程SUBUPDCSETONLR/數(shù)據(jù)寫(xiě)入磁盤(pán)CRETURN/程序結(jié)束CSUB#UPDBEGSR/子過(guò)程SUB#UPDF始CREADFMTFHS/讀PFFHSC件CEVALFLD01=LSFLD01/給字段FLD01賦值CUPDATEFMTFHS/修改文件CENDSR/子過(guò)程結(jié)束“/”后面的,只是簡(jiǎn)單的解釋?zhuān)绻砸褎?dòng)手寫(xiě),不需要輸入這些容。系統(tǒng)在運(yùn)行這個(gè)程序時(shí),是按如下的順序來(lái)執(zhí)行:1 .首句EVAL賦值語(yǔ)句,直接執(zhí)行;2 .當(dāng)系統(tǒng)發(fā)現(xiàn)操作碼“EXSR時(shí),根據(jù)后面的變量名&qu

11、ot;SUB#UPD,去查找又應(yīng)的"SUB#UPDBEGSR語(yǔ)句;3 .然后從"SUB#UPDBEGSR之后,順序向下執(zhí)行,直至“ENDSR語(yǔ)句4 .執(zhí)行到“ENDSR之后,將會(huì)再回到當(dāng)初的“EXSRSUB#UPD處,繼續(xù)向下執(zhí)行,直至URETURNS句為止這里提出一點(diǎn)要注意,如果子過(guò)程中,又執(zhí)行了自身,即在SUB#UP醒序中,又出現(xiàn)了“EXSRSUB#UPD,是可以編譯通過(guò)的,但在執(zhí)行過(guò)程中,系統(tǒng)會(huì)因?yàn)闊o(wú)法定位,而出現(xiàn)死循環(huán),直至報(bào)錯(cuò)異常中斷退出。也就是RPGLE勺程序中,子過(guò)程不允許出現(xiàn)遞歸。5 .5F行說(shuō)明5.1.1 容說(shuō)明首位填上F,然后按F4,會(huì)出現(xiàn)如下容:Fil

12、eFileEndofFileFilenameTypeDesignationFileAdditionSequenceFileRecord LimitsLength ofRecordFormatLengthProcessingKeyFieldAddressTypeFileOrganizationDeviceKeywordsComment各項(xiàng)的含義分別是:Filename:需要聲明的文件名,必須頂格,文件名必須唯一,也就是程序中對(duì)同樣的文件名不能聲明兩次。FileType:聲明文件的處理類(lèi)型。必須填寫(xiě)。允許的選項(xiàng)有:I:輸入型,即只讀文件,對(duì)聲明的文件只取其記錄的值,不對(duì)記錄進(jìn)行修改U:修改型,即對(duì)

13、聲明的文件進(jìn)行修改操作(刪除記錄屬于修改操作的一種)O:輸出型,即只寫(xiě),對(duì)聲明的文件只進(jìn)行寫(xiě)操作。C:混合型,用于對(duì)屏幕文件的定義。(混合型,即輸入/輸出型,以屏幕文件為便,也就是讀取屏幕文件的一些輸入字段信息,同時(shí)也可以輸出一些字段的值到屏幕文件中,但不能對(duì)屏幕文件自身進(jìn)行修改,所以與上面的U是有區(qū)別的)FileDesignation:文件的指定方式,允許的選項(xiàng)有:不填:表示這是一個(gè)輸出文件,即“FileType”項(xiàng)為“O'時(shí),此項(xiàng)不填P:表明聲明的文件是主文件,這個(gè)很少用,cycle相關(guān)S:表明聲明的文件是次文件,這個(gè)沒(méi)用過(guò),cycle相關(guān)R:Recordaddressfile,記

14、錄地址文件?沒(méi)用過(guò)T:數(shù)組或表文件?不懂,沒(méi)用過(guò)F:常用,具體含義不知道該如何翻譯(Fullproceduralfile)簡(jiǎn)單來(lái)說(shuō),不考慮cycle(循環(huán)控制),這樣理解就夠了:當(dāng)“FileType”為I,U,C時(shí),這里填“F”當(dāng)“FileType”為O時(shí),這里不填寫(xiě)EndofFile:程序結(jié)束前,對(duì)記錄的處理方式??梢圆惶睿蛱睢癊”。但從英文解釋上來(lái)看,不敢妄下定論,似乎不填,表示在程序結(jié)束前,要處理所有文件的所有記錄(含LF?);填E,表示只處理這個(gè)文件的所有記錄?總之,此項(xiàng)一般是不填。FileAddtion:是否會(huì)增加文件中的記錄,即是否會(huì)對(duì)文件進(jìn)行寫(xiě)操作??梢圆惶睿蛱睢癆”當(dāng)Fil

15、eType為“O'時(shí),系統(tǒng)自動(dòng),默認(rèn)此項(xiàng)為“A”,不必填寫(xiě);當(dāng)FileType為“I",或“U”時(shí),這項(xiàng)容可以填“A”,也可以不填。不填,即表示不會(huì)增加文件中的記錄,也就是沒(méi)有寫(xiě)操作;填“A”時(shí),即表示會(huì)增加文件中的記錄,也就是會(huì)對(duì)文件進(jìn)行寫(xiě)操作。Sequence:針對(duì)cycle使用的,表示排序順序。(Cycle我沒(méi)有用過(guò),估計(jì)可能是使用控制起來(lái),程序代碼不那么直觀,不利于上手和維護(hù),所以現(xiàn)在已經(jīng)不流行使用了。)當(dāng)定義為非cycle文件時(shí),即“FileDesignation"項(xiàng)非"P"、"S"時(shí),此項(xiàng)必須為空;當(dāng)定義為cycl

16、e文件時(shí),即“FileDesignation”項(xiàng)為“P"、或“S”時(shí),此項(xiàng)可填空、AD=A表示升序,D表示降序。因?yàn)镃YCL或在已不常用,所以通常不填。FileFormat文件格式,不能為空,允許的值有:E:聲明的文件,是外部描述的文件(即文件在程序運(yùn)行之前就已存在?)F:聲明的文件,是一個(gè)程序描述文件?(不知道什么意思,沒(méi)用過(guò))這里通常填“E”,即為外部描述文件RecordLength“FileFormat”為“F”時(shí),才需要填寫(xiě)。沒(méi)用過(guò)通常不填LimitProcessing不懂。通常不填。LengthofKeyField查詢(xún)時(shí),索引鍵值的長(zhǎng)度如果“FileFormat”項(xiàng)等于“E

17、”,即外部描述文件時(shí),此項(xiàng)不填如果“FileFormat”項(xiàng)等于“F”,便不需要按KEY值查詢(xún)時(shí),此項(xiàng)也不填如果“FileFormat”項(xiàng)等于“F”,需要按KEY值查詢(xún)時(shí),此項(xiàng)填寫(xiě)KEY值的長(zhǎng)度(12000)。因?yàn)橐话愣际褂猛獠棵枋鑫募赃@里一般都不填寫(xiě)。RecordAddressType記錄尋址類(lèi)型,好象是對(duì)文件鍵值的描述。允許的值如下:空:不使用KEY值,在程序段中,不會(huì)對(duì)文件的查詢(xún)定位操作,如“SETLL'、"CHAIN操作碼都不會(huì)用的時(shí),該項(xiàng)填空。K:使用KEY值,即表示會(huì)對(duì)聲明的文件進(jìn)行查詢(xún)定位操作,此時(shí)聲明的文件必須有鍵值,即必須為邏輯文件(LF文件),或在生

18、成文件時(shí),已加入了KEY值。(下面的選項(xiàng)應(yīng)該是程序描述文件才會(huì)使用)A:KEY值為字符型DKEY值為日期型F:KEY值為數(shù)字型GKEY值為非英文字符P:KEY值為壓縮型數(shù)字T:KEY值為時(shí)間型Z:KEY值為timestamp?總之,如果要按照鍵值對(duì)聲明的文件進(jìn)行查詢(xún)定位操作(即程序中使用了CHAINSETLL操作碼,則此項(xiàng)需要填寫(xiě)“K”;如不需要進(jìn)行查詢(xún)操作,則不填。),此項(xiàng)填“K”時(shí),聲明的文件必須含有KEY值。FileOrganization不知道,一般不填Device聲明文件的存放位置,必須填寫(xiě),允許的值有:DISK:磁盤(pán)文件,即文件存儲(chǔ)在磁盤(pán)上,最常見(jiàn)的;PRINTER:打印文件,提供

19、打印輸出描述,以及對(duì)打印設(shè)備訪問(wèn)。打印報(bào)表用這個(gè);WORKST:Nworkstation,工作站,顯示文件。屏幕文件(DSPF)的定義用這個(gè)值(下面這兩種我沒(méi)用過(guò)的)SEQ:磁帶文件,文件存儲(chǔ)在磁帶上。SPECIAL:特殊文件,我現(xiàn)在也不是很清楚具體使用方式。據(jù)blogliou說(shuō),這種類(lèi)型,是允許指定一種不能被RPGt接操作的輸入/輸出設(shè)備。比如可以通過(guò)SPECIAL文件,在RPGLE序中實(shí)現(xiàn)象讀寫(xiě)磁盤(pán)一樣,對(duì)DTAQS行程序間數(shù)據(jù)交換。Keyword可以不填,常用的值有(這里只列出幾個(gè)常用的):COMMIT該文件記錄的數(shù)據(jù)操作進(jìn)行日志處理(關(guān)于日志處理,后面會(huì)章節(jié)會(huì)講到)RENAME對(duì)文件記

20、錄格式名進(jìn)行重命名。比如說(shuō)程序中需要同時(shí)聲明PFFHSL1PFFHSL淪兩個(gè)邏輯文件。這兩個(gè)邏輯文件的記錄格式名都是一樣(通常和PF一樣,即都為FMTFHS不過(guò)也可以定義成不同。如果不同,當(dāng)然就不需要使用RENAM鍵字了)。那么,為了能讓系統(tǒng)區(qū)分,就必須對(duì)其中一個(gè)的記錄格式名進(jìn)行重命名。RENAM的語(yǔ)法:RENAME舊記錄格式名:新記錄格名),如下:FPFFHSL1IFEDISKFPFFHSL2IFEDISKRENAM(EFMTFHS:FMTFHS2新記錄格式可以自由定義,只要在該程序中無(wú)同名的即可。RENAM曲不會(huì)真正的更改文件的記錄格式名,僅是在當(dāng)前運(yùn)行程序中進(jìn)行重命名。對(duì)同時(shí)運(yùn)行的其它程

21、序無(wú)影響USROPN對(duì)于聲明的文件,由用戶(hù)自行打開(kāi)。如果不填寫(xiě)此關(guān)鍵字,系統(tǒng)將會(huì)在程序最最開(kāi)始(執(zhí)行第一句C行語(yǔ)句前),自動(dòng)執(zhí)行“OPEN文件”的操作,在程序結(jié)束后,自動(dòng)執(zhí)行“CLOSE文件”的操作。而填寫(xiě)此關(guān)鍵字之后,OPENCLOSE勺操作將由用戶(hù)在C行程序段中,自行處理。如果用戶(hù)未執(zhí)行OPENB作,就執(zhí)行CHANREADSETLL等語(yǔ)句,在編譯程序時(shí)就會(huì)報(bào)錯(cuò)。程序在結(jié)束之前,必須關(guān)閉所有已打開(kāi)的文件,所以用起來(lái)會(huì)比較繁瑣。USROPNT作用于對(duì)文件的解鎖,在同一程序中打開(kāi)同一文件的不同MEMBER,屬于一個(gè)較高級(jí)的用法,可在實(shí)際操作中慢慢體會(huì)。OPENCLOSE勺操作碼,對(duì)應(yīng)的是文件名,

22、不是記錄格式名。即COPENPFFHSL1CCLOSEPFFHSL1而不是COPENFMTFHSComment注釋說(shuō)明。源自RPG在RPG中是有作用的,可以對(duì)程序作簡(jiǎn)短的說(shuō)明,但在RPGL即,其實(shí)已經(jīng)沒(méi)有作用了,此項(xiàng)不用填。(填了也沒(méi)用)5.1.2 常用例子對(duì)文件進(jìn)行只讀的聲明:FPFFHSIFEDISK對(duì)文件進(jìn)行修改的聲明:FPFFHSUFEDISK對(duì)文件進(jìn)行只寫(xiě)的聲明:DISKFPFFHS對(duì)文件進(jìn)行修改,以及增加記錄的操作:FPFFHSUFAEDISK對(duì)文件進(jìn)行查詢(xún),增加記錄的操作,并對(duì)文件進(jìn)行查詢(xún)操作:FPFFHSL1IFAEKDISK聲明兩個(gè)記錄格式相同的文件,并對(duì)其中之一進(jìn)行重命名F

23、PFFHSL1IFEKDISKFPFFHSL2IFEKDISKRENAME(FMTFH:FSMTFHS2)注:在聲明時(shí),兩個(gè)文件不一定要上下緊接著;隨便改哪一個(gè)文件對(duì)應(yīng)的記錄格式都可以;新舊記錄格式名用冒號(hào)隔開(kāi),新記錄格式名可自行定義,無(wú)規(guī)則。對(duì)文件的修改操作進(jìn)行日志處理:FPFFHSL2UFEKDISKCOMMITcycle類(lèi)文件的聲明:FPFFHSL2IPEKDISK這樣文件聲明為P之后,程序中不需要寫(xiě)循環(huán)讀文件,也不需要寫(xiě)RETURN設(shè)指示器INLR,也就是FPFFHSL2IPEKDISKCREAD記錄格式名等價(jià)于FPFFHSL2IFEKDISKCDOW1=1CREAD記錄格式名EQ指示

24、器CIFEQ指示器=1CLEAVECENDIFCENDDOCRETURN5.1.3 補(bǔ)充說(shuō)明聲明的文件,可以同時(shí)使用多個(gè)keyword關(guān)鍵字,并可以不在同一行(但必須緊接在聲明的文件的下面),如下:FPFFHSL2IFEDISKRENAM(EFMTFH:SFMTFHS)2FCOMMIT即表示文件PFFHSL2同時(shí)使用了RENAMECOMMI刖個(gè)關(guān)鍵字。如果寫(xiě)得下,也可以寫(xiě)在同一行,以空格鍵分開(kāi),如下FPFFHSL2IFEDISKCOMMITRENAME(FMTF:HSFMTFHS)26 .6D行說(shuō)明首行填“D”,然后按F4,會(huì)出現(xiàn)如下容:DeclarationTo/NameE S/U Type

25、From LengthInternalDecimalDataTypePositionsKeywordsComment6.1.1 容說(shuō)明Name:定義的變量的名字,該名字可以不頂格寫(xiě)。(即允許有縮進(jìn))E:標(biāo)識(shí)定義的變量是否源自外部數(shù)據(jù)結(jié)構(gòu)??梢圆惶?,或填“E”上面的解釋可能有點(diǎn)饒口,其實(shí)這個(gè)地方的意思,就是說(shuō):如果是程序部自行定義一個(gè)臨時(shí)變量,此處不填;如果是引用的一個(gè)外部文件作為數(shù)據(jù)結(jié)構(gòu),那么這里就要填“E”;同時(shí)“DeclarationType”處,就要填“DS',即定義為一個(gè)結(jié)構(gòu);“Keywords”處要使用EXTNAM氏鍵字所謂“引用一個(gè)外部文件作為數(shù)據(jù)結(jié)構(gòu)”,也就是說(shuō)定義一個(gè)結(jié)

26、構(gòu),整個(gè)結(jié)構(gòu)中的變量,參照外部文件來(lái)定義。所謂結(jié)構(gòu),可以理解為一個(gè)“由多個(gè)變量組合而成的大變量”。舉例而言:DMYDSEDSEXTNAME(PFFHS)D MYDSDSD FHS01D FHS02D FHS03是等價(jià)的, 都是定義一個(gè)結(jié)構(gòu)變量和12(1在From項(xiàng);2在To/length項(xiàng))3456FHS01,MYDS名字可以自行定義),這個(gè)結(jié)構(gòu)變量是由三個(gè)字符型變量FHS0ZFHS03拼成的。第一種定義方法,就是引用外部文件“PFFHS作為數(shù)據(jù)結(jié)構(gòu)的定義,注意使用到了“EXTNAME關(guān)鍵字,而且“E”項(xiàng)的彳1為“E”。而第二種定義方法,就是直接定義一個(gè)結(jié)構(gòu)“MYDS。注意沒(méi)有使用外部文件時(shí),

27、“E”項(xiàng)的值為空。S/U:不知道,一般都填空。DeclarationType:定義變量的類(lèi)型,允許的值如下:不填:非以下容:數(shù)據(jù)結(jié)構(gòu)、常量、獨(dú)立變量、數(shù)組、表。此項(xiàng)為空時(shí),好象只能用來(lái)表示當(dāng)前定義的變量是屬于結(jié)構(gòu)的一個(gè)變量。在下面會(huì)舉例DS:數(shù)據(jù)結(jié)構(gòu),即定義一個(gè)結(jié)構(gòu)變量,這個(gè)之前已講過(guò)C:常量常量只能使用字符,不需要定義常量的長(zhǎng)度、類(lèi)型。常量的容寫(xiě)在“Keywords”處,并使用CONS氏鍵字,在程序段中,不能對(duì)常量進(jìn)行賦值操作。D MYNUMCONST('abcdefghijklmn')就是定義一個(gè)叫做MYNUMJ常量,這個(gè)常量包含字母a-n。PI:不知道,沒(méi)有用過(guò)PR:不知

28、道,沒(méi)用過(guò)S:定義以下容:獨(dú)立變量、數(shù)組、表定義一個(gè)叫MYFIELD1的變量,變量為1位長(zhǎng)的字符型DMYFIELD1S1/1在“To/length”項(xiàng)定義一個(gè)叫MYARRAY數(shù)組,共含3條記錄,每條記錄為1位字符型DMYARRAYS1DIM(3)/DIM在“Keywords”項(xiàng)表的定義沒(méi)有用過(guò)總之,這一項(xiàng),最常用的,就是“DS'、"S”與空。即結(jié)構(gòu)體與獨(dú)立變量,其它選項(xiàng)較少用到。From:當(dāng)"DeclarationType"項(xiàng)為"S"時(shí),表示獨(dú)立變量、數(shù)組,此項(xiàng)不填當(dāng)"DeclarationType”項(xiàng)為"DS

29、9;時(shí),表示結(jié)構(gòu),此項(xiàng)仍然不填當(dāng)“DeclarationType”項(xiàng)為空時(shí),表示當(dāng)前定義的變量,屬于上面定義的結(jié)構(gòu),此時(shí),此項(xiàng)可以填寫(xiě),也可以不填寫(xiě)。當(dāng)填寫(xiě)時(shí),“From”項(xiàng)表示變量在結(jié)構(gòu)中的起始位置,右對(duì)齊;“To/length”表示變量在結(jié)構(gòu)中的結(jié)束位置,也是右對(duì)齊。當(dāng)不填寫(xiě)時(shí),“To/length”表示直接定義為變量長(zhǎng)度。舉例:DMYDSDS/1 在"From"項(xiàng),2 在"To/length ”項(xiàng)/2 在 “ To/length ”項(xiàng)DDSFLD0112DDSFLD0234與DMYDSDSDDSFLD012DDSFLD022其實(shí)是等價(jià)的,都是定義一個(gè)結(jié)構(gòu)變量

30、MYDS這個(gè)結(jié)構(gòu)變量中,包含了兩個(gè)變量DSFLD01DSFLD02這兩個(gè)變量都是兩位長(zhǎng)字符。所不同的是,第一種定義方法,是指定了變量在結(jié)構(gòu)中的位置;而第二種方法,是直接指定變量的長(zhǎng)度和類(lèi)型注意到上面的定義中,DSFLD01、DSFLD02的DeclarationType為空,也就是表示這兩個(gè)字段是屬于上面定義的結(jié)構(gòu)MYDS如果此項(xiàng)為“S”,即表示這個(gè)變量與結(jié)構(gòu)無(wú)關(guān)DMYDSDSDDSFLD012/2在“To/length”項(xiàng)DDSFLD02S2在這個(gè)定義中,變量DSFLD0瀏是一個(gè)獨(dú)立的變量,與結(jié)構(gòu)MYDS6關(guān)。Length:上面已講述在定義結(jié)構(gòu)時(shí)的使用方法。在定義非結(jié)構(gòu)時(shí),此項(xiàng)的容即為定義變

31、量的長(zhǎng)度。右對(duì)齊InternalDataType:定義變量的類(lèi)型,允許的值有:空:變量定義為字符型、壓縮型數(shù)字A:變量定義為字符型B:二進(jìn)制?不知道D:變量定義為日期型F:變量定義為浮點(diǎn)型?G:變量定義為圖型?(非英文?漢字?)I:變量定義為帶符號(hào)的整數(shù)N:變量定義為指示器變量?(沒(méi)用過(guò))P:變量定義為壓縮型數(shù)字S:變量定義為普通的數(shù)型T:變量定義為時(shí)間型U:變量定義為無(wú)符號(hào)的整數(shù)Z:變量定義為日期+時(shí)間型(格式:年-月-日-時(shí).分.秒.微秒)*:變量定義為指針型其實(shí)我最常用,就是不填,因?yàn)橐话愕某绦?,有字符和?shù)字這兩種類(lèi)型變量,就足夠了。DecimalPositions:當(dāng)變量定義為數(shù)字型時(shí)

32、,用來(lái)標(biāo)志小數(shù)的位數(shù)。當(dāng)“To/Length”項(xiàng)為3,“InternalDataType”項(xiàng)為空時(shí)此項(xiàng)為空,表示定義的變量為3位長(zhǎng)的字符型DMYFLD01S3/定義為3位字符型此項(xiàng)不為空(右對(duì)齊),表示定義的變量為數(shù)字型DMYFLD01S32/定義數(shù)字型變量,1位整數(shù),2位小數(shù)(總長(zhǎng)為3位)Keywords:關(guān)鍵字,可以不填,常用的值如下:(同樣,這里我也只列出幾個(gè)常用的,這里先不做詳細(xì)說(shuō)明,僅供參考,在后面的例子,看看就知道用法了)CONS:T定義常量的值DIM:定義數(shù)組EXTNAME引用外部文件作為數(shù)據(jù)結(jié)構(gòu)變量EXTFLD:對(duì)引用了外部文件作為數(shù)據(jù)結(jié)構(gòu)的某個(gè)變量,進(jìn)行重命名LIKE:定義變

33、量時(shí),參照已存在的變量定義OCCUR:S定義結(jié)構(gòu)體變量時(shí),指定的結(jié)構(gòu)體變量的記錄條數(shù)INZ:定義變量時(shí),賦值初始值DATFM:T定義日期變量時(shí),指定日期格式*MDY(mm/dd/yy)*DMY(dd/mm/yy)*YMD(yy/mm/dd)*JUL(yy/ddd)*ISO(yyyy-mm-dd)*USA(mm/dd/yyyy)*EUR(dd.mm.yyyy)*JIS(yyyy-mm-dd)Comment注釋項(xiàng),源自RPG不用填,因?yàn)樘盍艘矝](méi)用。2.6.2常用例子定義一個(gè)10位長(zhǎng)的字符型變量:10DMYFLD定義一個(gè)10位長(zhǎng),其中含2位小數(shù)的字符型變量,并使其初始值為1DMYFLDS102INZ

34、(1)定義一個(gè)每條記錄為5位長(zhǎng)字符型變量,共10條記錄的數(shù)組DMYFLDS5DIM(10)定義一個(gè)10位長(zhǎng)的字符型變量,再定義一個(gè)變量,參照前一變量定義DMYFLD01S10DMYFLD02SLIKE(MYFLD01)定義一個(gè)結(jié)構(gòu),由一個(gè)3位長(zhǎng)的字符變量,和一個(gè)10位長(zhǎng),其中2位小數(shù)的數(shù)字變量組成DMYDSDSDMYDS013DMYDS02102定義一個(gè)結(jié)構(gòu)變量,結(jié)構(gòu)容參照外部文件PFFHSDMYDSEDSEXTNAME(PFFHS)定義一個(gè)結(jié)構(gòu)變量,結(jié)構(gòu)容參照外部文件PFFHS并且將第二個(gè)字段重命名為FHS999DMYDSEDSEXTNAME(PFFHS)DFHS999EDSEXTFLD(F

35、HS02)定義一個(gè)日期型變量,格式為yyyy-mm-ddDMYDATESDDATFMT(*ISO)2.6.3補(bǔ)充說(shuō)明變量的定義,除了在D行定義之外,還可以在C行通過(guò)賦值語(yǔ)句直接定義如DFLD01S2INZ(01)與CMOVE01FLD012/2在length處,右對(duì)齊是等價(jià)的定義結(jié)構(gòu)之后,可以將結(jié)構(gòu)變量視為一個(gè)普通的變量進(jìn)行賦值來(lái)改變結(jié)構(gòu)變量的值,也可以通過(guò)對(duì)組成結(jié)構(gòu)變量的變量進(jìn)行賦值,來(lái)達(dá)到修改結(jié)構(gòu)變量的值的目的。如:DMYDSDSDMYFLD012DMYFLD022在C行中,這兩句是等價(jià)的CEVAL%SUBST(MYDS:3:2)=01CEVALMYFLD02=01第一句是直接改結(jié)構(gòu)變量M

36、YDS勺后兩位的值(當(dāng)然,此時(shí)MYFLD02勺值也變化了)第二句是對(duì)MYFLD02s行賦值,同樣,賦完值之后,MYDS勺后兩位也變?yōu)?1'在需要頻繁進(jìn)行數(shù)字與字符之間轉(zhuǎn)換時(shí),偷懶的人會(huì)通過(guò)定義這樣的結(jié)構(gòu)來(lái)達(dá)到目的:DMYDSDSDMYFLD0118DMYFLD02180比如說(shuō),給MYFLD01賦值為'20070208'之后,MYFLD0獨(dú)就自動(dòng)等于20070208;然后給MYFLD02力口1之后,MYFLD0建于20070209,MYFLD01的值也自動(dòng)等于'20070209'??梢哉J(rèn)為結(jié)構(gòu)變量MYDS是字符型(即一直等于MYFLD01的值)這種方法,當(dāng)

37、需要字符型變量時(shí),就使用MYFLD01當(dāng)需要數(shù)字變量時(shí),就使用MYFLD02不過(guò)我總覺(jué)得有點(diǎn)類(lèi)似于作弊,一般沒(méi)用。關(guān)于數(shù)組、結(jié)構(gòu)體的容,因?yàn)橐f(shuō)起來(lái)容還頗多,而也屬于略為高級(jí)一些的用法,所以將在后面專(zhuān)設(shè)章節(jié)講述。2.7入口參數(shù)程序可以通過(guò)“*ENTRY定義入口參數(shù),或稱(chēng)之為接口參數(shù),來(lái)傳遞數(shù)據(jù)。假設(shè)有程序FHS01ILE,其中入口參數(shù)的定義如下:C*ENTRYPLISTCPARMFLD013CPARMFLD024其中:*ENTRYB“Factor1”項(xiàng);PLIST在“Operation”項(xiàng);PAR樁“Operation”項(xiàng);FLD01、FLD02都在“Result”項(xiàng)上述定義,表示這個(gè)程序通過(guò)

38、兩個(gè)字段與其它外部程序溝通。那么別的程序(如FHS02ILE)在調(diào)用程序FHS01ILE時(shí),就要帶上兩個(gè)字符型變量,如CCALLFHS01ILECPARMFHSFLD013CPARMFHSFLD024在兩個(gè)程序里,這兩個(gè)變量名可以不同(比如說(shuō)一邊叫FHSFLD01,F(xiàn)HSFLD02;一邊叫FLD01,F(xiàn)LD02),但長(zhǎng)度,類(lèi)型必須匹配。如果在FHS02ILE中,F(xiàn)HSFLD01等于123',FHSFLD02?于abcd',那么系統(tǒng)在運(yùn)行CALL語(yǔ)句,執(zhí)行程序FHS01ILE時(shí),將會(huì)對(duì)字段FLD01初始化賦值,使其一開(kāi)始就等于123,字段FLD02等于abcd。如果FHS01IL

39、E程序中,對(duì)FLD01、FLD02進(jìn)行了改動(dòng),比如FLD01最后等于789',FLD02最后等于efgh',那么程序FHS02ILE在調(diào)用完FHS01ILE之后,F(xiàn)HSFLD01FHSFLD0於兩個(gè)字段也同樣會(huì)改變,成為789,和efgh也就是入口參數(shù)的變化是可以傳遞的,其實(shí)應(yīng)該很好理解吧。入口參數(shù)的定義,可以寫(xiě)在程序的任何一處,而程序的執(zhí)行,始終是從C行的順序第一行開(kāi)始執(zhí)行,與入口參數(shù)所在的位置無(wú)關(guān)。FHS02ILE也可以使用一個(gè)大變量來(lái)調(diào)用FHS01ILE,只要總長(zhǎng)相等即可(這種方法僅限于被調(diào)用的程序FHS01ILE的入口參數(shù)全部為字符型才可使用,僅僅只是不會(huì)錯(cuò),不建議這樣

40、使用。CCALLFHS01ILE其實(shí)從上面的例子可以看出,入口參數(shù)可以使用結(jié)構(gòu)的形式來(lái)表達(dá),所以下面這種寫(xiě)法也不會(huì)有錯(cuò)。 (如果被調(diào)用程序有數(shù)字型變量,只要在定義結(jié)構(gòu)時(shí)也定義為數(shù)字型即可)PARMFHSFLD01 7DMYDSDSDDS013DDS024CCALl FHS01ILECPARM不過(guò)要注意,如果MYDSRPG程序調(diào)用C程序,那么入口參數(shù)必須嚴(yán)格按照C程序中的來(lái),比如C程序中帶了兩個(gè)字符型參數(shù),那么RPG程序中也必須是兩個(gè)字段入口參數(shù),不能使用由兩個(gè)字符變量組成的結(jié)構(gòu)。原理可以自行想想。既然可以使用結(jié)構(gòu)做為入口參數(shù),當(dāng)然,也可以參照外部文件來(lái)定義結(jié)構(gòu)做為入口參數(shù)DMYDSEDSEXT

41、NAME(PFFHS)CCALLFHS01ILECPARMMYDS與CCALLFHS01ILECPARMFHS012CPARMFHS022CPARMFHS032是等價(jià)的??梢钥吹?,參照外部文件定義結(jié)構(gòu)做為入口參數(shù)時(shí),可以有效的節(jié)省代碼行,而且不會(huì)出現(xiàn)遺漏。所以在實(shí)際使用中,常會(huì)看到,將一些公共程序的入口參數(shù)定義成一個(gè)PF文件。而調(diào)用它的程序,就參照這個(gè)PF文件,定義結(jié)構(gòu)做為調(diào)用的接口參數(shù)。當(dāng)接口參數(shù)不一致時(shí),如FHS02ILE中漏了第二個(gè)參數(shù)時(shí):CCALLFHS01ILECPARMFHS013此時(shí),并不是一開(kāi)始運(yùn)行FHS01ILE程序,系統(tǒng)判斷入口參數(shù)不符就報(bào)錯(cuò);實(shí)際上,此時(shí),F(xiàn)LD01的值還

42、是正確的,但FLD02的值就處于一個(gè)未初始化的狀態(tài)。于是,當(dāng)代碼執(zhí)行到與FLD02有關(guān)的操作碼時(shí),才會(huì)報(bào)錯(cuò);如果FHS01ILE在運(yùn)行的過(guò)程中,因?yàn)檫壿嬇袛啵ㄈ鏘F條件判斷)的關(guān)系,而未執(zhí)行任何與FLD02有關(guān)的操作碼,那么程序會(huì)正常運(yùn)行完畢,不會(huì)有報(bào)錯(cuò)。這時(shí),F(xiàn)HS02ILE調(diào)用了程序FHS01ILE之后,程序中原有的接口參數(shù)的數(shù)據(jù)就可能因?yàn)檫@次調(diào)用程序而發(fā)生錯(cuò)位,從而導(dǎo)致數(shù)據(jù)的錯(cuò)誤、混亂。數(shù)據(jù)的錯(cuò)誤、混亂其實(shí)還不是最大的問(wèn)題,更大的問(wèn)題在于“這時(shí)我們不知道數(shù)據(jù)已經(jīng)出錯(cuò)了”。解決之道,也是如上所說(shuō),對(duì)于調(diào)用頻繁,且入口參數(shù)較多的公共程序,考慮將其入口參數(shù)寫(xiě)成一個(gè)PF文件。這樣調(diào)整入口參數(shù)時(shí),

43、只要修改PF文件并重新編譯,再編譯相關(guān)程序即可(至少發(fā)生遺漏時(shí),程序會(huì)報(bào)錯(cuò)異常中斷,不會(huì)出現(xiàn)錯(cuò)誤的數(shù)據(jù)而不自知)2.8C行說(shuō)明2.8.1寫(xiě)在前面終于說(shuō)到程序的執(zhí)行部分,也是我們寫(xiě)程序的平時(shí)接觸的最多的一部分:“C”行了。在這里,我想先說(shuō)一下我個(gè)人的看法:400系統(tǒng),提供了一些語(yǔ)法,可以大大減少程序代碼行數(shù)。但是如果這個(gè)用法并不普遍,那么并不建議使用(當(dāng)然自己用來(lái)練習(xí)無(wú)妨),否則會(huì)給其它讀代碼的人帶來(lái)困難,同時(shí)也會(huì)給自己帶來(lái)麻煩(比如出了問(wèn)題,別人看不懂,自然會(huì)打來(lái)問(wèn)原作者)基于這樣的道理,同樣,我認(rèn)為FREE格式的程序,雖然可以自由書(shū)寫(xiě),有縮進(jìn)等優(yōu)勢(shì),但是除非整個(gè)項(xiàng)目組所有成員都已熟練掌握FR

44、EE格式的程序,或已進(jìn)行過(guò)完善、系統(tǒng)的FREE格式的培訓(xùn),才能正式使用。如果只是知道幾個(gè)與RPGRPGLE寸應(yīng)的語(yǔ)法就用來(lái)進(jìn)行實(shí)際處理,可能會(huì)造成的維護(hù)的不便,尤其是在出現(xiàn)一些不那么明顯的錯(cuò)誤之后。至于cycle,不知道是不是基于這個(gè)原因,現(xiàn)在用得也比較少了。感覺(jué)RPGL斗,至少有一半的容是與cycle相關(guān)的。2.8.2容說(shuō)明LevelN01Factor1OperationFactor2ResultDecimalLengthPositionsHILOEQCommentLevel:和cycle相關(guān),沒(méi)研究過(guò),一般不填N01:這個(gè)含義比較豐富,我只用過(guò)其中一種:首位不帶N,后面填寫(xiě)0199的數(shù)字時(shí)

45、,表示相應(yīng)的指示器打開(kāi)時(shí),執(zhí)行后面的操作,如:C 12 等價(jià)于EVALFHS01=01IF*IN12= 1EVALFHS01=01ENDIF首位帶N,后面填寫(xiě)0199的數(shù)字,表示相應(yīng)的指示器關(guān)閉時(shí),執(zhí)行后面的操作要注意,該項(xiàng)容僅作用于該行操作碼。如果指示器打開(kāi)后,需要執(zhí)行多條語(yǔ)句,那么每條語(yǔ)句前面,該項(xiàng)都要賦值。即CIF*IN12=1CEVALFHS01=01CEVALFHS02=02CENDIF如果用這種方式來(lái)表達(dá),就要寫(xiě)作C12EVALFHS01=01C12EVALFHS02=02所以說(shuō),根據(jù)指示器狀態(tài)來(lái)執(zhí)行的語(yǔ)句,在執(zhí)行少量操作碼時(shí),可以使用這種方法;如果語(yǔ)句較多,修改起來(lái)不方便,還是直

46、接用IFENDIF的判斷語(yǔ)句比較合適。該項(xiàng)還有針對(duì)其它指示器的用法,看上去似乎又是與CYCLED關(guān),暫不介紹了。Factor1:操作容一,將在后面與操作碼一起講Operation:操作碼,后面有專(zhuān)門(mén)章節(jié)講解操作碼Factor2:操作容二,同上Result:操作結(jié)果,同上Length:長(zhǎng)度。變量的定義,除了在D行定義之外,還可以在C行通過(guò)賦值語(yǔ)句直接定義如DFLD01S2INZ(01)與CMOVE01FLD012/2在length處,右對(duì)齊是等價(jià)的一個(gè)變量,在整個(gè)程序中,只要定義一次就可以了,對(duì)定義的順序沒(méi)有強(qiáng)制要求。DecimalPositions:與length相呼應(yīng),當(dāng)此項(xiàng)有值時(shí),表示定義

47、的是一個(gè)數(shù)字型變量,該項(xiàng)表示小數(shù)位長(zhǎng)度。如CZ-ADD2FLD0232即是說(shuō),將FLD02定義為一個(gè)3位長(zhǎng),其中1位整數(shù),2位小數(shù)的數(shù)字變量,并賦值為2.00HI、LO、EQ這是三個(gè)指示器位置項(xiàng)??少x值的容是從0199,在以后的說(shuō)明中,如果HI項(xiàng)填寫(xiě)10,LO項(xiàng)填寫(xiě)20,EQ項(xiàng)填寫(xiě)30,那么我所說(shuō)的HI指示器,即是指*IN10,LO指示器即是*IN20,EQ指示器即是*IN30,依此類(lèi)推。(也就是說(shuō),HI指示器,并不是*INHI,事實(shí)上,也沒(méi)有*INHI這個(gè)指示器)Commen:t注釋行,源自RPG不用填,填了也沒(méi)用。2.8.3ILE操作碼分類(lèi):1. 程序流程控制DO、DOU、DOUxx、DO

48、W、DOWx、xITER、LEVAEIF、ELSE、ELSEIF、IFxx、ORxx、ANDxxSELECT、WHE、NWHENx、xOTHER、ENDxx、GOTO、TAG、EXSR、BEGSR、ENDSRCABxx2. 初始化操作CLEAR、RESET3. 文件操作OPEN、CLOSE、CHAIN、SETGT、SETLL、READ、READC、READE、READP、READP、EDELETE、UPDAT、EWRITE、UNLOCKROLBK、COMMI、TEXFMT、ACQ、EXCEP、TFEOD、FORC、ENEXT、POST、REL4. 程序調(diào)用CALL、CALLB、CALLP、PA

49、RM、PLIST、RETURN5. 賦值語(yǔ)句MOV、EMOVE、AMOVE、LEVAL6. 字符操作CAT、CHEC、KCHECK、RSCAN、SUBST、XLATE7. 數(shù)字操作ADDDIV(除)、MULT(乘)、MVR(除法取余)、SQRT(開(kāi)方)、SUBXFOOTZ-ADQZ-SUB8. 數(shù)組操作符LOOKU、PMOVE、ASORTA、XFOOT9. 數(shù)據(jù)區(qū)操作(沒(méi)用過(guò))IN、OUT、UNLOCK10. 日期操作ADDDU、REXTRC、TSUBDU、RTEST11. 指示器操作SETOF、FSETON12. 信息操作(前兩個(gè)沒(méi)用過(guò))DUM、PSHTDN、TIME、DSPLY13. 存管

50、理操作(完全沒(méi)用過(guò))ALLOC、DEALLO、CREALLOC14. 位操作(沒(méi)用過(guò))BITOFF、BITON、TESTB2.8.4ILE操作碼2.8.4.1 A-CACQ(E)(Acquire)取地址位。其實(shí)400的程序中也有指針型變量,那么也就會(huì)有地址位,這個(gè)命令是取地址位的。我試過(guò),不過(guò)不知道取出了地址位能干嘛,所以沒(méi)有實(shí)際運(yùn)用過(guò)。ADD(H)(Add)加法操作1. 基本語(yǔ)法:Factory1OperationFactory2ResultFHS01ADDFHS02FHS03/RPG的語(yǔ)法等價(jià)于EVALFHS03=FHS01+FHS02/RPGLE的語(yǔ)法FHS01FHS02FHS03必須都

51、為數(shù)字型變量(P型,或S型),或者就是數(shù)字意思是將Factory1項(xiàng)的數(shù)據(jù),加上Factory2項(xiàng)的數(shù)據(jù),賦值到Result項(xiàng)上2. 語(yǔ)法二:如果這樣寫(xiě)的話(huà):Factory1OperationFactory2ResultADDFHS02FHS03就等價(jià)于:EVALFHS03=FHS03+FHS02即Factory1項(xiàng)未填時(shí),就表示將Result項(xiàng)的數(shù)據(jù),加上Factory2項(xiàng)的數(shù)據(jù),然后賦值到Result項(xiàng)上3. 四舍五入:(H)表示四舍五入,如FHS02=12.50(4,2),FHS03=3(2,0),那么ADD(H)FHS02FHS03執(zhí)行之后,F(xiàn)HS03=16(因?yàn)檫M(jìn)位了)而ADDFHS

52、02FHS03執(zhí)行之后,F(xiàn)HS03=15不過(guò)實(shí)際使用中,我們都盡可能使相加的字段小數(shù)位數(shù)相等,所以ADD操作碼一般都沒(méi)有使用到四舍五入的功能。4.可以在ADDt作時(shí),對(duì)Result項(xiàng)的變量進(jìn)行定義Factory1OperationFactory2ResultFHS01ADDFHS02FHS03102EVAL語(yǔ)句不能對(duì)在賦值的同時(shí),對(duì)變量進(jìn)行定義。5. 關(guān)于結(jié)果數(shù)據(jù)超長(zhǎng)時(shí)的問(wèn)題:當(dāng)加出的結(jié)果超長(zhǎng),比如FHS03定義為3,2(1位整數(shù),2位小數(shù),下同)時(shí),再假設(shè)FHS01=1QFHS02=4那么FHS01+FHS0冰來(lái)應(yīng)t等于14,但用ADDt作之后,系統(tǒng)會(huì)自動(dòng)將超長(zhǎng)位截去,即FHS03最后等于4

53、;而用EVAL語(yǔ)句時(shí),系統(tǒng)判斷超長(zhǎng)后,會(huì)直接報(bào)錯(cuò)"Thetargetforanumericoperationistoosmalltoholdtheresult”,然后異常中斷。使用ADDlt作碼程序不會(huì)異常中斷,但有可能發(fā)生了錯(cuò)誤的數(shù)據(jù)我們也不知道;使用EVAL操作碼可以避免產(chǎn)生錯(cuò)誤的數(shù)據(jù),但程序會(huì)異常中斷,需要進(jìn)行人工干預(yù)??筛鶕?jù)實(shí)際情況選擇使用ADD還是EVAL.ADDDUR(E)(AddDuration)日期時(shí)間相加1.對(duì)日期型變量進(jìn)行加操作,比如說(shuō)已定義日期型變量MYDATE1MYDATE2將MYDATE的日期力口上3天,賦值至ijMYDATE由:Factory1Operat

54、ionFactory2ResultMYDATE1ADDDUR3:*DMYDATE2其中,F(xiàn)actory1,Result項(xiàng),都必須為日期型變量(即在D行,InternalDataType項(xiàng)為"D')2 .與ADDB作碼相同,F(xiàn)actory1項(xiàng)為空時(shí),表示直接在Result項(xiàng)上進(jìn)行日期相加,如將MYDATE1直接加上3個(gè)月(即結(jié)果也是賦值到MYDATE/):Factory1OperationFactory2ResultADDDUR3:*MMYDATE13 .日期型變量的參數(shù)含義:* D表示天,也可用*DAYS* M表示月,也可用*MONTHS* Y表示年,也可用*YEARS4. 除了日期型之外,還有時(shí)間型,日期時(shí)間型,都可以使用ADDDU鐮作碼.在D行,InternalDataType定義為"T,表示時(shí)間型(時(shí)、分、秒)InternalDataType定義為“Z”,表示日期時(shí)間型(年、月、日、時(shí)、分

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論