




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1簡樸闡明錯誤!未定義書簽。
2程序代碼行H勺編寫錯誤!未定義書簽。
2.1最簡樸的RPGLE程序錯誤!未定義書簽。
2.2舉例準(zhǔn)備錯誤!未定義書簽。
2.3簡樸H勺程序流程錯誤!未定義書簽。
2.4常見的程序流程錯誤!未定義書簽。
2.5F行闡明錯誤!未定義書簽。
內(nèi)容闡明錯誤!未定義書簽。
常用例子錯誤!未定義書簽。
補充闡明錯誤!未定義書簽。
2.6D行闡明錯誤!未定義書簽。
內(nèi)容闡明錯誤!未定義書簽。
常用例子錯誤!未定義書簽。
補充闡明錯誤!未定義書簽。
2.7入口參數(shù)錯誤!未定義書簽。
2.8C行闡明錯誤!未定義書簽。
寫在前面錯誤!未定義書簽。
內(nèi)容闡明錯誤!未定義書簽.
ILE操作碼分類:錯誤!未定義書簽。
ILE操作碼錯誤!未定義書簽。
A-C錯誤!未定義書簽。
D-E錯誤!未定義書簽。
F-N錯誤!未定義書簽。
0-R錯誤!未定義書簽。
S-Z錯誤!未定義書簽。
3和程序有關(guān)的數(shù)據(jù)庫知識錯誤!未定義書簽。
3.1LF(邏輯文獻(xiàn))錯誤!未定義書簽。
邏輯文獻(xiàn)概念錯誤!未定義書簽。
有關(guān)編譯的問題錯誤!未定義書簽。
邏輯文獻(xiàn)對效率口勺影響錯誤!未定義書簽。
3.2MEMBER錯誤!未定義書簽。
3.3游標(biāo)錯誤!未定義書簽。
游標(biāo)的概念錯誤!未定義書簽。
不一樣操作碼對應(yīng)的游標(biāo)的處理錯誤!未定義書簽。
“有且僅有”口勺游標(biāo)錯誤!未定義書簽。
LOVAL.HIVAL對應(yīng)的游標(biāo)操作錯誤!未定義書簽。
3.4事務(wù)處理-COMMIT錯誤!未定義書簽。
概念描述錯誤!未定義書簽。
使用措施錯誤!未定義書簽.
注意事項錯誤!未定義書簽。
3.5有關(guān)鎖表的問題LCKW錯誤!未定義書簽。
4DEBUG調(diào)試以及常見出錯信息錯誤!未定義書簽。
4.1寫在前面錯誤!未定義書簽。
4.2常規(guī)使用方法錯誤!未定義書簽。
程序編譯錯誤!未定義書簽。
執(zhí)行DEBUG命令錯誤!未定義書簽。
運行程序錯誤!未定義書簽。
在DEBUG模式中進(jìn)行調(diào)試錯誤!未定義書簽。
跟蹤被目前途序調(diào)用的程序錯誤!未定義書簽。
一定要退出DEBUG模式錯誤!未定義書簽。
補充錯誤!未定義書簽。
4.3跟蹤批處理程序(Fromqingzhou)錯誤!未定義書簽。
4.4常見的出錯信息錯誤!未定義書簽。
編譯程序時的出錯信息錯誤!未定義書簽。
運行時H勺出錯信息錯誤!未定義書簽。
5CL、CMD錯誤!未定義書簽。
5.1CL程序錯誤!未定義書簽。
基本認(rèn)識錯誤!未定義書簽。
CL程序的常用語法及命令:錯誤!未定義書簽。
不常用H勺語法錯誤!未定義書簽.
5.2CMD錯誤!未定義書簽。
6屏幕文獻(xiàn)及使用錯誤!未定義書簽。
7其他錯誤!未定義書簽。
7.1報表打印錯誤!未定義書簽。
7.2SAVF,備份與恢復(fù)錯誤!未定義書簽。
7.3菜單一MENU錯誤!未定義書簽。
7.4開發(fā)時常用口勺命令錯誤!未定義書簽。
7.5一點想法錯誤!未定義書簽。
1簡樸闡明
內(nèi)部交流、或可作培訓(xùn)使用。對顧客作如下假定:
1、能COPY、修改、編譯源代碼(RPGLE、CLP),并能運行編譯后H勺程序
2、能COPY、修改、編譯文獻(xiàn)(PF、LF、PRTF、DSPF);
3、對數(shù)據(jù)文獻(xiàn)(PF)有簡樸的認(rèn)識(FIELD-RECORD9PF),并懂得LF與PFH勺對應(yīng)關(guān)系。
2程序代碼行的編寫
2.1最簡樸的RPGLE程序
為便于理解,這里寫一種最簡樸的RPGLE程序
CL0N01Factorl+++++++Opcodc&ExtFact()r2+++++++Result++++++++Len++D+HiL<)Eq
**與當(dāng)******咨****Beginningofdata*************^*******^***^^*****^****
0001.00CHELLOWORLD,DSPLY
00D2.00CRETURN
******************Endofdata*******************a******g*************
這個程序編譯成功,并調(diào)用(CALL程序名),就是在屏幕上反白顯示“HELLOWORLD”字樣。(其
中,綠色字樣,是系統(tǒng)自動顯示H勺,下同)
與自由風(fēng)格H勺C語言不一樣,RPGLE中的編碼,是有一定的格式,假如寫錯,將會在目前代碼行上高
亮反綠顯示。初學(xué)者假如不太清晰從何處開始下手,可以使用“F4”鍵查看?(F4鍵只有用2進(jìn)入的編輯狀
態(tài)才有效,用5進(jìn)入的查看狀態(tài)是無效的)
LevelN01Factor1OperationFactor2Result
'HELLOWORLDDSPLY
Decimal
LengthPositionsHILOEQComment
有關(guān)每一項所對應(yīng)的內(nèi)容代表什么意思,該怎樣填寫,即怎樣”程序,將會在下面的詳細(xì)講解。
2.2舉例準(zhǔn)備
列出表名,字段,以以便下面的舉例.
假設(shè)有PF文獻(xiàn)叫PFFHS,文獻(xiàn)的記錄格式叫FMTFHS
每條記錄,都是由FHS01、FHS02、FHS03三個字段構(gòu)成,每個字段都是兩位長的字符型變量。
邏輯文獻(xiàn)PFFHSL1的鍵值為FHS01
邏輯文獻(xiàn)PFFHSL2H勺鍵值為FHS02
邏輯文獻(xiàn)PFFHSL3H勺鍵值為FHS01、FHS02
注:
文獻(xiàn)的記錄格式,可以理解為給這個文獻(xiàn)整條記錄起口勺一種名字:或者是說將每條記錄視都視做一種
類型相似大變量,然后給這個大變量起的名字。因此文獻(xiàn)的記錄格式信息中,包具有一條記錄由多少個字
段構(gòu)成,總計長度是多少這樣的信息。
文獻(xiàn)H勺記錄格式,與各個字段同步定義。(寫文獻(xiàn)的源碼時)
文獻(xiàn)H勺記錄格式在RPGLEH勺程序中,不能與文獻(xiàn)名相似。
2.3簡樸的程序流程
為以便起見,系統(tǒng)自動顯示H勺就不再貼出來了,只貼代碼段。
FPFFHSUFEDISK
CREADFMTFHS
CEVALFHSO1=''O1"
CUPDATEFMTFHS
CSETONLR
CRETURN
這個程序的意思,是說讀PFFHS這個文獻(xiàn),然后將讀到口勺笫條記錄中的FHSOI這個字段的值修改為
“01”。
“SETONLR”,LR的位置可在HI、LO、EQ中任選一處。意思是指將打開指示器*INLR,即
賦值使指示器*【NLR口勺值等于1。等價于"EVAL*INLR='I'",意思是強(qiáng)制將內(nèi)存中的數(shù)據(jù)寫到磁
盤中。(基于效率原因,系統(tǒng)在修改文獻(xiàn)時.,會先將修改H勺成果先放在內(nèi)存中,在同一程序中,讀取數(shù)據(jù)也
是先從內(nèi)存中查詢。)LR,取自是LastRecord
RETURN,表達(dá)程序結(jié)束,在背面“操作碼”一節(jié)中,會有講述。
假如不太明白,就記住
CSETONLR
CRETURN
或
CEVAL*1NLR=T
cRETURN
這兩句話加在一起,表達(dá)程序結(jié)束就可以了。
從這個程序中,我們可以看到,RPGLE的程序,大體上可以分為兩個部分:
1、申明、定義部分:申明程序中使用到的文獻(xiàn)(F行),定義程序中使用的變量(D行)
2、程序運行部分:即C行,也就是程序段。
在RPGLE程序中,F(xiàn)行必須在D行前面,D行必須在C行前面。
程序執(zhí)行的起始次序,將從定義部分之后,第一種C行開始,次序向下執(zhí)行。
程序中的F行、D行都不是必須項,一種程序可以沒有F行(如僅完畢計算功能的公共函數(shù),例如計
算利息),也可以沒有D行(沒有需要尤其定義日勺變量,或者所有變量都在C行進(jìn)行定義),但不應(yīng)當(dāng)沒有
C行,由于F行與D行都屬于非執(zhí)行行,是起定義作用;C行是執(zhí)行行。沒有C行的程序,是無執(zhí)行意義
的,
2.4常見的程序流程
FPFFHSUFEDISK〃申明文獻(xiàn)PFFHS
DLSFLD01S2〃定義臨時變量LSFLD01
CEVALLSFLDOI='O1'〃給變量LSFLD0I賦值
CEXSRSUB#UPD〃執(zhí)吁子過程SUB#UPD
CEVALLSFLDO2='O2'〃給變量LSFLD02賦值
CEXSRSUB#UPD〃執(zhí)吁子過程SUB#UPD
CSETONLR〃數(shù)據(jù)寫入磁盤
CRETURN〃程序結(jié)束
CSUB#UPDBEGSR〃子過程SUB#UPD開始
CREADFMTFHS〃讀PFFHS文獻(xiàn)
CEVALFLDO1=LSFLDOI〃給字段FLD01賦值
CUPDATEFMTFHS〃修改文獻(xiàn)
CENDSR〃子過程結(jié)束
“//”背面的,只是簡樸的解釋,假如自己動手寫,不需要輸入這些內(nèi)容。
系統(tǒng)在運行這個程序時,是按如下的次序來執(zhí)行:
I.首句EVAL賦值語句,直接執(zhí)行;
2.當(dāng)系統(tǒng)發(fā)現(xiàn)操作碼“EXSR”時,根據(jù)背面的變量名"SUB#UPD”,去查找對應(yīng)的“SUB#UPD
BEGSR”語句;
3.然后從"SUB#UPDBEGSR”之后,次序向下執(zhí)行,直至“ENDSR”語句
4.執(zhí)行至卜'ENDSR”之后,格會再回到當(dāng)時的"EXSRSUB#UPD”處,繼續(xù)向下執(zhí)行,直到
RETURN語句為止
這里提出一點要注意,假如子過程中,又執(zhí)行了自身,即在SUB#UPD程序中,又出現(xiàn)了“EXSR
SUB#UPD",是可以編譯通過的,但在執(zhí)行過程中,系統(tǒng)會由于無法定位,而出現(xiàn)死循環(huán),直至報錯
異常中斷退出。也就是RPGLEH勺程序中,了?過程不容許出現(xiàn)遞歸。
2.5F行闡明
2.5.1內(nèi)容闡明
首位填上F,然后按F4,會出現(xiàn)如下內(nèi)容:
FileFileEndofFile
FilenameTypeDesignationFileAdditionSequence
FileRecordLimitsLengthofRecord
FormatLengthProcessingKeyFieldAddressType
File
OrganizationDeviceKeywords
Comment
各項的含義分別是:
Filename:
需要申明的文獻(xiàn)名,必須頂格,文獻(xiàn)名必須唯,也就是程序中對同樣的文獻(xiàn)名不能申明兩次。
FileType:
申明文獻(xiàn)的處理類型。必須填寫。容許的選項有:
I:輸入型,即只讀文獻(xiàn),對日明的文獻(xiàn)只取其記錄H勺值,不對記錄進(jìn)行修改
U:修改型,即對申明的文獻(xiàn)進(jìn)行修改操作(刪除記錄屬于修改操作的?種)
O:輸出型,即只寫,對申明的文獻(xiàn)只進(jìn)行寫操作。
C:混合型,用于對屏幕文獻(xiàn)的定義。(混合型,即輸入/輸出型,以屏幕文獻(xiàn)為便,也就是讀取屏幕文
獻(xiàn)口勺某些榆入字段信息,同步也可以輸出某些字段的值到屏幕文獻(xiàn)中,但不能對屏幕文獻(xiàn)自身進(jìn)行修改,
因比與上面H勺U是有區(qū)別的)
FileDesignation:
文獻(xiàn)日勺指定方式,容許的選項有:
不填:表達(dá)這是一種輸出文獻(xiàn),即"FileType"項為"O"時,此項不填
P:表明申明口勺文獻(xiàn)是主文獻(xiàn),這個很少用,cycle行關(guān)
S:表明申明的文獻(xiàn)是次文獻(xiàn),這個沒用過,cycle有關(guān)
R:Recordaddressfile.記錄地址文獻(xiàn)?沒用過
T:數(shù)組或表文獻(xiàn)?不懂,沒用過
F:常用,詳細(xì)含義不懂得該怎樣翻譯(Fullproceduralfile)
簡樸來說,不考慮cycle(循環(huán)控制),這樣理解就夠了:
當(dāng)“FileType”為I,U,C時,這里填“F”
當(dāng)“FileType”為0時,這里不填寫
EndofFile:
程序結(jié)束前.?對記錄的處理方式c可以不填,或填"E:《日從英文解釋卜來看,不敢妄下定論,似乎
不填,表達(dá)在程序結(jié)束前,要處理所有文獻(xiàn)的所有記錄(含LF?);填E,表達(dá)只處理這個文獻(xiàn)口勺所有記錄?
總之,此項一般是不填。
FileAddtion:
與否會增長文獻(xiàn)中的記錄,即與否會對文獻(xiàn)進(jìn)行寫操作。
可以不填,或填“A”
當(dāng)FileType為“O”時,系統(tǒng)自動默認(rèn)此項為“A”,不必填寫;
當(dāng)FileType為“I",或“U”時,這項內(nèi)容可以填“A”,也可以不填。不填,即表達(dá)不會增長文獻(xiàn)中
的記錄,也就是沒有寫操作;填“A”時,即表達(dá)會增長文獻(xiàn)中的記錄,也就是會對文獻(xiàn)進(jìn)行寫操作。
Sequence:
針對cycle使用的,表達(dá)排序次序。(Cycle我沒有用過,估計也許是使用控制起來,程序代碼不那么直
觀,不利于上手和維護(hù),因此目前已經(jīng)不流行使用了。)
當(dāng)定義為非cycle文獻(xiàn)時,即“FileDesignation”項非“P”、"S”時,此項必須為空;
當(dāng)定義為cycle文獻(xiàn)時,即“FileDesignalion”項為“P"、或“S”時,此項可填空、A、D。A表達(dá)升
序,D表達(dá)降序。
由于CYCLE目前已不常用,因此一般不填。
FileFormat
文獻(xiàn)格式,不能為空,容許口勺值有:
E:申明的文獻(xiàn),是外部描述的文獻(xiàn)(即文獻(xiàn)在程序運行之前就已存在?)
F:申明的文獻(xiàn),是一種程序描述文獻(xiàn)?(不懂得什么意思,沒用過)
這里一般填“E”,即為外部描述文獻(xiàn)
RecordLength
“FileFormat”為“F”時,才需要填寫。沒用過
一般不填
LimitProcessing
不懂。
一般不填。
LengthofKeyField
查詢時,索引鍵值的長度
假如“FileFormat”項等于"E”,即外部描述文獻(xiàn)時,此項不填
假如“FileFormat”項等于“可,便不需要按KEY值查詢時,此項也不填
假如“FileFormat”項等于“F”,需要按KEY值查詢時,此項填寫KEY值匹J長度(1—2023)。
由于一般都使用外部描述文獻(xiàn),因此這里一般都不填寫。
RecordAddressType
記錄尋址類型,好象是對文獻(xiàn)鍵值的描述。容許時值如下:
空:不使用KEY值,在程序段中,不會對文獻(xiàn)的查詢定位操作,如“SETLL“、"CHAIN”操作碼都不
會用的時,該項填空。
K:使用KEY值,即表達(dá)會對申明的文獻(xiàn)進(jìn)行查詢定位操作,此時申明H勺文獻(xiàn)必須有鍵值,即必須為
邏輯文獻(xiàn)(LF文獻(xiàn)),或在生成文獻(xiàn)時,已加入了KEY值。
(下面的選項應(yīng)當(dāng)是程序描述文獻(xiàn)才會使用)
A:KEY值為字符型
D:KEY值為日期型
RKEY值為數(shù)字型
G:KEY值為非英文字符
P:KEY值為壓縮型數(shù)字
T:KEY值為時間型
Z:KEY值為timestamp?
總之,假如要按照鍵值對申明的文獻(xiàn)進(jìn)行查詢定位操作(即程序中使用了CHAIN、SETLL操作碼,則
此項需要填寫“K”;如不需要進(jìn)行變詢操作,則不填。),此項填“K”時,申明的文獻(xiàn)必須具有KEY值.
FileOrganization
不懂得,一般不填
Device
申明文獻(xiàn)的寄存位置,必須填寫,容許的值有:
DISK:磁盤文獻(xiàn),即文獻(xiàn)存儲在磁盤上,最常見的;
PRINTER:打印文獻(xiàn),提供打印輸出描述,以及對打印設(shè)備訪問。打印報表用這個:
WORKSTN:workstation,工作站,顯示文獻(xiàn)。屏幕文獻(xiàn)(DSPF)W、J定義用這個值
(下面這兩種我沒用過的)
SEQ:磁帶文獻(xiàn),文獻(xiàn)存儲在磁帶上。
SPECLXL:特殊文獻(xiàn),我目前也不是很清晰詳細(xì)使用方式。據(jù)blogliou說,這種類型,是容許指定
一種不能被RPG直接操作口勺輸入/輸出設(shè)備。例如可以通過SPECIAL文獻(xiàn),在RPGLE程序中實現(xiàn)象讀寫
磁盤同樣,對DTAQ進(jìn)行程序間數(shù)據(jù)互換。
Keyword
可以不填,常用的值有(這里只列出幾種常用的):
COMMIT
該文獻(xiàn)記錄的數(shù)據(jù)操作進(jìn)行日志處理(有關(guān)日志處理,背面會章節(jié)會講到)
RENAME
對文獻(xiàn)記錄格式名進(jìn)行重命名。例如說程序中需要同步申明PFFHSLI,PFFHSL2這兩個邏輯文獻(xiàn)。
這兩個邏輯文獻(xiàn)的記錄格式名都是同樣(一般和PF同樣,即都為FMTFHS:不過也可以定義成不一樣。
假如不一樣,當(dāng)然就不需要使月RENAME鍵字了)。那么,為了能讓系統(tǒng)辨別,就必須對其中一種
的記錄格式名進(jìn)行重命名。RENAME的語法:RENAME(舊記錄格式名:新記錄格名),如下:
FPFFHSL1IFEDISK
FPFFHSL2IFEDISKRENAME(FMTFHS:FMTFHS2
新記錄格式可以自由定義,只要在該程序中無同名的即可。RENAME并不會真正的更改文獻(xiàn)的記
錄格式名,僅是在目前運行程序中進(jìn)行重命名。對同步運行的其他程序無影響
USROPN
對于申明的文獻(xiàn),由顧客自行打開。假如不填寫此關(guān)鍵字,系統(tǒng)將會在程序最最開始(執(zhí)行第一
句C行語句前),自動執(zhí)行“OPEN文獻(xiàn)”H勺操作,在程序結(jié)束后,自動執(zhí)行“CLOSE文獻(xiàn)”的
操作。而填寫此關(guān)鍵字之后,OPEN,CLOSE的操作將由顧客在C行程序段中,自行處理。假為顧客
未執(zhí)行OPEN操作,就執(zhí)行CHAIN、READ、SETLL等語句,在編譯程序時就會報錯。程序在結(jié)束之
前,必須關(guān)閉所有已打開的文獻(xiàn),因此用起來會比較繁瑣。USROPN常作用于對文獻(xiàn)的解鎖,在同一
程序中打開同一文獻(xiàn)口勺不一樣MEMBER等,屬于一種較高級的使用方法,可在實際操作中慢慢體會。
OPEN,CLOSEH勺操作碼,對應(yīng)的是文獻(xiàn)名,不是記錄格式名。即
COPENPFFHSL1
CCLOSEPFFHSL1
而不是
OPENFMTFHS
Comment
注釋闡明。源自RPG,在RPG中是有作用的,可以對程序作簡電H勺闡明,但在RPGLE中,其實已經(jīng)
沒有作用了,此項不用填。(填了也沒用)
2.5.2常用例子
對文獻(xiàn)進(jìn)行只讀的申明:
FPFFHSIFEDISK
對文獻(xiàn)進(jìn)行修改的申明:
FPFFHSUFEDISK
對文獻(xiàn)進(jìn)行只寫H勺申明:
FPFFHSOEDISK
對文獻(xiàn)進(jìn)行修改,以及增長記錄日勺操作:
FPFFHSUFAEDISK
對文獻(xiàn)進(jìn)行查詢,增長記錄的操作,并對文獻(xiàn)進(jìn)行查詢操作:
FPFFHSL1IFAEKDISK
申明兩個記錄格式相似的文獻(xiàn),并對其中之一進(jìn)行重命名
FPFFHSL)IFEKDISK
FPFFHSL2IFEKDISKRENAME(FMTFHS:FMTFHS2)
注:在申明時,兩個文獻(xiàn)不?定要上下緊接著:隨便改哪?種文獻(xiàn)對應(yīng)的記錄格式都可以;新舊
記錄格式名用冒號隔開,新記錄格式名可自行定義,無規(guī)則。
對文獻(xiàn)的修改操作進(jìn)行日志處理:
FPFFHSL2UFKDISKCOMMIT
cycle類文獻(xiàn)的申明:
FPFFHSL2IPEKD1SK
這樣文獻(xiàn)申明為P之后,程序中不需要寫循環(huán)讀文獻(xiàn),也不需要寫RETURN,設(shè)指示器INLR,也就是
FPFFHSL2IPEKDISK
CREAD記錄格式名
等價于
FPFFHSL2IFEKDISK
CDOW1=1
CREAD記錄格式名EQ指示器
CIFEQ指示器=T
CLEAVE
CENDIF
CENDDO
CRETURN
2.5.3補充闡明
申明H勺文獻(xiàn),可以同步使用多種keyword關(guān)鍵字,并可以不在同一行(但必須緊接在申明的文獻(xiàn)的下
而),如下:
FPFFHSL2IFEDISKRENAME(FMTFHS:FMTFHS2)
FCOMMIT
即表達(dá)文獻(xiàn)PFFHSL2,同步使用「RENAME、COMMIT兩個關(guān)鍵字。
假如寫得下,也可以寫在同一行,以空格鍵分開,如下
FPFFHSL2IFEDISKCOMMITRENAME(FMTFHS:FMTFHS2)
2.6D行闡明
首行填“D”,然后按F4,會出現(xiàn)如下內(nèi)容:
DeclarationTo/
NameES/UTypeFromLength
InternalDecimal
DataTypePositionsKeywords
Comment
2.6.1內(nèi)容闡明
Name:
定義口勺變量口勺名字,該名字可以不頂格寫。(即容許有縮進(jìn))
標(biāo)識定義的變量與否源自外部數(shù)據(jù)構(gòu)造??梢圆惶睿蛱睢癊”
上而打勺解釋也許有點饒口,其實這個地方的意思,就是說:
假如是程序內(nèi)部自行定義一種臨時變量,此處不填;
假如是引用的?種外部文獻(xiàn)作為數(shù)據(jù)構(gòu)造,那么這里就要填“E”;同步“DeclarationType”處,就
要填“DS”,即定義為一種構(gòu)造:“Keywords”處要使用EXTNAME關(guān)鍵字
所謂“引用一種外部文獻(xiàn)作為數(shù)據(jù)構(gòu)造”,也就是說定義一種構(gòu)造,整個構(gòu)造中的變量,參照外部文獻(xiàn)
來定義。
所謂構(gòu)造,可以理解為一種“曰多種變量組合而成H勺大變量”。
舉例而言:
DMYDSEDSEXTNAME(PFFHS)
和
DMYDSDS
DFHS01I2(1在From項:2在To/lenglh項)
DFHS0234
DFHS0356
是等價的,都是定義一種構(gòu)造變量MYDS(名字可以自行定義),這個構(gòu)造變量是由三個字符型變量
FHSOI,FHS02,FHS03拼成的。
第一種定義措施,就是引用外部文獻(xiàn)“PFFHS”作為數(shù)據(jù)構(gòu)造的定義,注意使用到了“EXTNAME”
關(guān)健字,并且“E”項的值為“E”。
而第二種定義措施,就是直接足義一種構(gòu)造“MYDS”。注意沒有使用外部文獻(xiàn)時,“E”項打勺值為空。
S/lIz
不懂得,?般都填空。
DeclarationType:
定義變量的類型,容許時值如工:
不填:非如下內(nèi)容:數(shù)據(jù)構(gòu)造、常量、獨立變量、數(shù)組、表。此項為空時,好象只能用來表達(dá)目前
定義的變量是屬于構(gòu)造的一種變量。在下面會舉例
DS:數(shù)據(jù)構(gòu)造,即定義一種構(gòu)造變量,這個之前已講過
C:常量
常量只能使用字符,不需要定義常量的長度、類型。常量的內(nèi)容寫在“Keywords”處,并使
用CONST關(guān)鍵字,在程序段中,不能對常量進(jìn)行賦值操作。
DMYNUMCCONST(abcdefghijklmn')
就是定義一種叫做MYNUMH勺常量,這個常量包括字母a-n0
PI:不懂得,沒有用過
PR:不懂得,沒用過
S:定義如下內(nèi)容:獨立變量、數(shù)組、表
定義一種叫MYFIELD1的變量,變量為1位長的字符型
DMYFIELD1S1在“To/lengih”項
定義?種叫MYARRAYH勺數(shù)組,共含3條記錄,每條記錄為1位字符型
DMYARRAYS1DIM⑶〃DIM在“Keywords”項
表的定義沒有用過
總之,這一項,最常用的,就是“DS”、“S”與空。即構(gòu)造體與獨立變量,其他選項較少用到。
From:
當(dāng)“DeclarationType”項為“S”時,表達(dá)獨立變量、數(shù)組,此項不填
當(dāng)“DeclarationType”項為“DS”時,表達(dá)構(gòu)造,此項仍然不填
當(dāng)“DcclaraiionTypc”項為空時,表達(dá)目前定義的變量,屬于上面定義的構(gòu)造,此時,此項可以填寫,
也可以不填寫。
當(dāng)填寫時,“From”項表達(dá)變星在構(gòu)造中日勺起始位置,右對齊:“To/lenglh”表達(dá)變量在構(gòu)造中的結(jié)束
位置,也是右對齊。
當(dāng)不填寫時,“To/length”表達(dá)直接定義為變量長度。
舉例:
DMYDSDS
DDSFLD0112//I在“From”項,2在“To/length"項
DDSFLD0234
與
DMYDSDS
DDSFLD012〃2在“To/length”項
DDSFLD022
其實是等價的,都是定義一種構(gòu)造變量MYDS,這個構(gòu)造變量中,包括了兩個變量DSFLD01,DSFLD02,
這兩個變量都是兩位長字符。所不一樣的是,第一種定義措施,是指定了變量在構(gòu)造中的位置:向第二種
措施,是直接指定變量的長度和類型
注意到上面的定義中,DSFLD0I>DSFLD02H'、JDeclarationType為空,也就是表達(dá)這兩個字段是屬于
上而定義口勺構(gòu)造MYDS。假如此項為“S”,即表達(dá)這個變量與構(gòu)造無關(guān)
DMYDSDS
DDSFLD0I2〃2在“To/length”項
DDSFLD02S2
在這個定義中,變量DSFLD02就是一種獨立的變量,與構(gòu)造MYDS無關(guān)。
Length:
上面已講述在定義構(gòu)造時的使月措施。
在定義非構(gòu)造時,此項R勺內(nèi)容即為定義變量口勺長度。右對齊
InternalDataType:
定義變量的類型,容許的值有:
空:變量定義為字符型、壓縮型數(shù)字
A:變量定義為字符型
B:二進(jìn)制?不懂得
D:變量定義為日期型
F:變量定義為浮點型?
G:變量定義為圖型?(非英父?中文?)
I:變量定義為帶符號的整數(shù)
N:變量定義為指示器變量?(沒用過)
P:變量定義為壓縮型數(shù)字
S:變量定義為一般的數(shù)型
T:變量定義為時間型
U:變量定義為無符號的整數(shù)
Z:變量定義為日期+時間型(格式:年-月-日-時.分.秒.微秒)
*:變量定義為指針型
其實我最常用,就是不填,由二一般口勺程序,有字符和數(shù)字這兩種類型變量,就足夠了。
DecimalPositions:
當(dāng)變量定義為數(shù)字型時,用來標(biāo)志小數(shù)的位數(shù).
當(dāng)"To/Lenglh”項為3,**InternalDataTypeM項為空時
此項為空,表達(dá)定義的變晝?yōu)?位長的字符型
DMYFLD01S3〃定義為3位字符型
此項不為空(右對齊),表達(dá)定義的變量為數(shù)字型
DMYFLD01S32〃定義數(shù)字型變量,I位整數(shù),2位小數(shù)(總長為3
位)
Keywords:
關(guān)鍵字,可以不填,常用時值如下:(同樣,這里我也只列出幾種常用的,這里先不做詳細(xì)闡明,僅供
參照,在背面的例子,看看就懂得使用方法了)
CONST:定義常量的值
DIM:定義數(shù)組
EXTNAME:引用外部文獻(xiàn)作為數(shù)據(jù)構(gòu)造變量
EXTFLD:對引用了外部文獻(xiàn)作為數(shù)據(jù)構(gòu)造的某個變量,進(jìn)行重命名
LIKE:定義變量時,參照已存在的變量定義
OCCURS:定義構(gòu)造體變量時,指定的構(gòu)造體變量H勺記錄條數(shù)
INZ:定義變量時,賦值初始值
DATFMT:定義R期變量時,指定R期格式
*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
注釋項,源自RPG,不用填,由于填了也沒用。
2.6.2常用例子
定義一種io位長日勺字符型變量:
DMYFLDS10
定義?種10位長,其中含2位小數(shù)的字符型變量,并使其初始值為1
DMYFLDS102INZ(l)
定義一種每條記錄為5位長字符型變量,共10條記錄的數(shù)組
DMYFLDS5DIM(10)
定義一種10位長H勺字符型變量,再定義一種變量,參照前一變量定義
DMYFLD01S10
DMYFLD02SLIKE(MYFLDOl)
定義一種構(gòu)造,由一種3位長的字符變量,和一種10位長,其中2位小數(shù)的數(shù)字變量構(gòu)成
DMYDSDS
DMYDS013
DMYDSO2102
定義一種構(gòu)造變量,構(gòu)造內(nèi)容參照外部文獻(xiàn)PFFHS
DMYDSEDSEXTNAME(PFFHS)
定義一種構(gòu)造變量,構(gòu)造內(nèi)容參照外部文獻(xiàn)PFFHS,并且將第二個字段重命名為FHS999
DMYDSEDSEXTNAME(PFFHS)
DFHS999EDSEXTFLD(FHS02)
定義一種日期型變量,格式為yyyy-mni-dd
DMYDATESDDATFMT(*ISO)
2.6.3補充闡明
變量H勺定義,除了在D行定義之外,還可以在C行通過賦值語句直接定義
如
DFLD01S2INZ('Ol')
與
CMOVE'01FLD()12〃2在length處,右對齊
是等價的
定義構(gòu)造之后,可以將構(gòu)造變量視為一種一般的變量進(jìn)行賦值來變化構(gòu)造變量的值,也可以通過對構(gòu)
成構(gòu)造變量的變量進(jìn)行賦值,來到達(dá)修改構(gòu)造變量的值的目的。
如:
DMYDSDS
DMYFLDOI2
DMYFLD022
在C行中,這兩句是等價日勺
CEVAL%SUBST(MYDS:3:2)='O「
CEVALMYFLD02=,01,
第一句是直接改構(gòu)造變量MYDS的后兩位的值(當(dāng)然,此時MYFLDO2的值也變化了)
第二句是對MYFLDO2進(jìn)行賦值,同樣,賦完值之后,MYDS的后兩位也變?yōu)椋?1,
在需要頻繁進(jìn)行數(shù)字與字符之間轉(zhuǎn)換時,偷懶的人會通過定義這樣的構(gòu)造來到達(dá)目的:
DMYDSDS
DMYFLDOI18
DMYFLD02I80
例如說,給MYFLDOI賦值為'20230208'之后,MYFLD02也就自動等于20230208;然后給
MYFLD02加I之后,MYFLD02等于20230209,MYFLDOI的值.也自動等于'20230209'??梢哉J(rèn)為構(gòu)
造變量MYDS是字符型(即一直等于MYPLDO1的J值)
這種措施,當(dāng)需要字符型變量時,就使用MYFLDOI;當(dāng)需要數(shù)字變量時,就使用MYFLD02,不
過我總覺得有點類似于作弊,一般沒用。
有關(guān)數(shù)組、構(gòu)造體口勺內(nèi)容,由干要說起來內(nèi)容還頗多,而也屬于略為高級某些的使用方法,因此將在
背而專設(shè)章節(jié)講述。
2.7人口參數(shù)
程序可以通過“*ENTRY”定義入口參數(shù),或稱之為接口參數(shù),來傳遞數(shù)據(jù)。
假設(shè)有程序FHS01ILE,其中入口參數(shù)的定義如下:
C*ENTRYPLIST
CPARMFLDOI3
CPARMFLD024
其中:
/ENTRY在4<Factor1"項;
PLIST在“Operation”項;
PARM在“Operation”項:
FLD01、FLD02都在“Result”項
上述定義,表達(dá)這個程序通過兩個字段與其他外部程序溝通。那么別口勺程序(如FHS02ILE)在調(diào)用
程序FHS0ULE時,就要帶上兩個字符型變量,如
CCALL,F(xiàn)HS0IILE,
CPARMFHSFLD013
CPARMFHSFLD024
在兩個程序里,這兩個變量名可以不?樣(例如說一邊叫FHSFLD01,FHSFLD02;?邊叫FLD01,
FLD02),但長度,類型必須匹配。
假如在FHS02ILE中,F(xiàn)HSFLD01等于‘123',FHSFLD02等于‘a(chǎn)bed',那么系統(tǒng)在運行CALL語句,
執(zhí)行程序FHS0IILE時,將會對字段FLDOI初始化賦值,使其一開始就等于'123',字段FLD02等
于'abed'。
假如FHS0IILE程序中,對FLDOI、FLD02進(jìn)行了改動,例如FLDOI最終等于,789',FLD02最
終等于‘efgh',那么程序FHS02ILE在調(diào)用完FHS0IILE之后,F(xiàn)HSFLDOKFHSFLD02這兩個字段也
同樣會變化,成為‘789',和,efgh,
也就是人口參數(shù)的變化是可以傳遞的,其實應(yīng)當(dāng)很好理解吧。
入口參數(shù)口勺定義,可以寫在程序口勺任何一處,而程序的執(zhí)行,一直是從C行的次序第一行開始執(zhí)
行,與入口參數(shù)所在的位置無關(guān)。
FHS02ILE也可以使用一種大變量來調(diào)用FHS01ILE,只要總長相等即可(這種措施僅限于被調(diào)用
的程序FHS01ILE的入口參數(shù)所有為字符型才可使用,僅僅只是不會錯,不提議這樣使用。
CCALL'FHS01ILE'
PARMFHSFLD017
其實從上面H勺例子可以看出,入口參數(shù)可以使用構(gòu)造的形式來體現(xiàn),所如下面這種寫法也不會有
錯。(假如被調(diào)用程序有數(shù)字型變量,只要在定義構(gòu)造時也定義為數(shù)字型即可)
DMYDSDS
DDS013
DDS024
CCAL1*FHSOiILE,
CPARMMYDS
不過要注意,假如RPG程序調(diào)用C程序,那么入口參數(shù)必須嚴(yán)格按照C程序中的來,例如C程
序中帶了兩個字符型參數(shù),那么RPG程序中也必須是兩個字段入口參數(shù),不能使用由兩個字符變量構(gòu)
成的構(gòu)造。原理可以自行想想。
既然可以使用構(gòu)造做為入I」參數(shù),當(dāng)然,也可以參照外部文獻(xiàn)來定義構(gòu)造做為入I」參數(shù)
DMYDSEDSEXTNAME(PFFHS)
CCALL'FHSOIILE'
CPARMMYDS
與
CCALL4FHSOIILE'
CPARMFHSO12
CPARMFHSO22
CPARMFHSO32
是等價的。
可以看到,參照外部文獻(xiàn)定義構(gòu)造做為入口參數(shù)時,可以有效的節(jié)省代碼行,并且不會出現(xiàn)遺漏。
因此在實際使用中,常會看到,將某些公共程序日勺入口參數(shù)定義成一種PF文獻(xiàn)。而調(diào)用它口勺程序,就
參照這個PF文獻(xiàn),定義構(gòu)造做為調(diào)用的接口參數(shù)。
當(dāng)接口參數(shù)不一致時,如FHS02ILE中漏了第二個參數(shù)時:
CCALLTI1SO1ILE,
CPARMFHS013
此時,并不是?開始運行FHSOIILE程序,系統(tǒng)判斷入口參數(shù)不符就報錯:實際上,此時,F(xiàn)LD0I
時值還是對H勺口勺,但FLDO2的值就處在一種未初始化的狀態(tài)。于是,現(xiàn)代碼執(zhí)行到與FLD02有關(guān)的操
作碼時,才會報錯;假如FHSOIILE在運行的過程中,由于邏輯判斷(如IF條件判斷)的關(guān)系,而未
執(zhí)行任何與FLDO2有關(guān)的操作碼,那么程序會正常運行完畢,不會有報錯。
這時,,F(xiàn)HSO2ILE調(diào)用了程序FHSOIILE之后,程序中原有的接口參數(shù)的數(shù)據(jù)就也許由于這次調(diào)用
程序而發(fā)生錯位,從而導(dǎo)致數(shù)據(jù)的錯誤、混亂。數(shù)據(jù)的錯誤、混亂其實還不是最大的問題,更大的問
題在于“這時我們不懂得數(shù)據(jù)已經(jīng)出錯了“。處理之道,也是如上所說,對于調(diào)用頻繁,且入口參數(shù)較
多的公共程序,考慮將其入口參數(shù)寫成?種PF文獻(xiàn)。這樣調(diào)整人口參數(shù)時,只要修改PF文獻(xiàn)并重新
編譯,再編譯有關(guān)程序即可(至少發(fā)生遺漏時,程序會報錯異常中斷,不會出現(xiàn)錯誤的數(shù)據(jù)而不自知)
2.8C行闡明
2.8.1寫在前面
終于說到程序的執(zhí)行部分,也是我們寫程序H勺平時接觸的最多的一部分:“C”行了。在這里,我
想先說一下我個人的見解:
400系統(tǒng),提供了某些語法,可以大大減少程序代碼行數(shù)。不過假如這個使用方法并不普遍,那么
并不提議使用(當(dāng)然自己用來練習(xí)無妨),否則會給其他讀代碼的人帶來困難,同步也會給自己帶來麻
煩(例如出了問題,他人看不懂,自然會打來問原作者)
基于這樣口勺道理,同樣,我認(rèn)為FREE格式口勺程序,雖然可以自由書寫,有縮進(jìn)等優(yōu)勢,不過除
非整個項目組所有組員都已純熟掌握FREE格式的程序,或已進(jìn)行過完善、系統(tǒng)的FREE格式的培訓(xùn)I,
才能正式使用。假如只是懂得幾種與RPG,RPGLE對應(yīng)的語法就用來進(jìn)行實際處理,也許會導(dǎo)致的維
護(hù)的不便,尤其是在出現(xiàn)某些天那么明顯的錯誤之后。
至于cycle,不懂得是不是基于這個原因,目前用得也比較少了。感覺RPGLE中,至少有二分之
一『'J內(nèi)容是與cycle有關(guān)o
2.8.2內(nèi)容闡明
LevelN01Factor1OperationFactor2Result
Decimal
LengthPositionsHILOEQComment
Level:
和cycle有關(guān),沒研究過,一般不填
N01:
這個含義比較豐富,我只用過其中一種:
首位不帶N,背面填寫01—99的數(shù)字時,表達(dá)對應(yīng)的指示器打開時,執(zhí)行背面H勺操作,如:
C12EVALFHS01='0r
等價于
IF*INI2=,I,
EVALFHS01='()l'
ENDIF
首位帶N,背面填寫01—99的數(shù)字,表達(dá)對應(yīng)的指示器關(guān)閉時,執(zhí)行背面的操作
要注意,該項內(nèi)容僅作用于該行操作碼。假如指示器打開后,需要執(zhí)行多條語句,那么每條語句前面,
該項都要賦值。
即
cIF*IN12=T
cEVALFHSO1='O1'
CEVALFHS02=,02,
cENDIF
假如用這種方式來體現(xiàn),就要寫作
C12EVALFHSO1='O1'
C12EVALFHS02=,02,
因此說,根據(jù)指示器狀態(tài)來執(zhí)行的語句,在執(zhí)行少許操作碼時,可以使用這種措施;假如語句較多,
修改起來不以便,還是直接用IF—ENDIFH勺判斷語句比較合適。
該項尚有針對其他指示器的使月方法,看上去似乎又是與CYCLE有關(guān),暫不簡介了。
Factor1:
操作內(nèi)容一,將在背面與操作碼一起講
Operation:
操作碼,背面有專門章節(jié).講解操作碼
Factor2:
操作內(nèi)容二,同上
Result:
操作成果,同上
Length:
長度。
變量口勺定義,除了在D行定義之外,還可以在C行通過賦值語句直接定義
如
DFLDOIS2INZ('Ol')
與
cMOVE'01'FLDOI2〃2在lengih處,右對齊
是等價H勺
一種變量,在整個程序中,只要定義一次就可以了,對定義打勺次序沒有強(qiáng)制規(guī)定。
DecimalPositions:
與length相呼應(yīng),當(dāng)此項有值時,表達(dá)定義口勺是一種數(shù)字型變量,該項表達(dá)小數(shù)位長度。
如
CZ-ADD2FLD0232
即是說,將FLD02定義為一種3位長,其中1位整數(shù),2位小數(shù)的數(shù)字變
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45169-2025增材制造金屬制件殘余應(yīng)力聲束控制法
- GB/T 45142-2025海洋溢油污染生態(tài)修復(fù)監(jiān)測和效果評估技術(shù)指南
- GB/T 45221-2025化學(xué)品EASZY試驗利用轉(zhuǎn)基因tg(cyp19a1b:GFP)斑馬魚胚胎通過雌激素受體檢測內(nèi)分泌活性物質(zhì)
- 鄉(xiāng)村地基出售合同范本
- 2025年鐵嶺考貨運從業(yè)資格證
- 2025年永州貨運從業(yè)資格證怎么考試
- 加工合同范本道客
- 買車庫出售合同范本
- it購銷合同范本
- 醫(yī)院業(yè)務(wù)合同范本
- 基于核心素養(yǎng)的學(xué)習(xí)觀和教學(xué)觀
- 感染性腹瀉及其防控措施
- 第二篇-安全操作規(guī)程
- 《多維度兒童智力診斷量表》MIDSC的編制
- 罪犯教育學(xué)課程
- 紀(jì)檢監(jiān)察辦案談話應(yīng)注意的問題研討
- 超實用工程結(jié)算單excel模板
- 一年級小學(xué)生新學(xué)期開學(xué)計劃
- ISO9001-2015質(zhì)量手冊和全套程序文件
- 醫(yī)療器械產(chǎn)品放行程序
- 07j306排水溝圖集標(biāo)準(zhǔn)
評論
0/150
提交評論