RPG AS400程序员培训手册7099.docx
《RPG AS400程序员培训手册7099.docx》由会员分享,可在线阅读,更多相关《RPG AS400程序员培训手册7099.docx(28页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、2.8.4.4 O-R ON-ERROR (On-Error)没用过OPEN (EE) (Oppen Fille ffor Proocesssinng) 打开文件Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQOPEN 文件名名OPEN 后面的的目标,必须是在当当前程序序中已声声明的文文件名(不不是文件件的记录录格式名名),而且在OPPEN 操作之之后,在在程序结结束之前前之前,必必须有对应的CLOOSE 操作。使用OPEEN 操操作,文文件在声声明时,必须使用USSROPPN 关关键字(详见见D 行说明)。ORxx (Orr)
2、 逻逻辑判断断或Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQFLD011 IFFGT FLDD03FLD011 ORREQ FLDD02等价于IF FLLD011FLLD033 ORR FLLD011=FLLD022与IF、IIFxxx,ANDD、ANDDxx 类似,RPPGLEE 的写写法ORR,比RPPG 的的写法OORxxx 要灵灵活,而且可以用用来表达达一些复复杂的逻辑关关系。有有鉴于此,所所以通常常IF 语句中,我我会以OOR 为为主,基本不用OORxxx。如果果在编程序方方面,公公司/项目组无硬性性要求,那那我觉
3、得还是少用用ORxxx 吧吧,总觉得这种种写法的的逻辑关关系看起起来不直直接,尤尤其是有有很复杂杂的ANDD,ORR 时。OTHERR (OOtheerwiise Sellectt) 分分支语句的判判断与分支语句句SELLECTT 一起起使用,表表示不符符合上述述所有条条件时的操作作,如下下:Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQSELECCTWHEN 条件判判断1处理语句11WHEN 条件判判断2处理语句22OTHERR处理语句33ENDSLL在这个例子子中,当当满足条件件判断11 时,运行行处理语句1,运行行结束后
4、跳跳至ENNDSLL 处;如果不满足足条件判判断1,则程序继续续向下执行,判判断是否否满足条件件判断22。当满足条件件判断22 时,运行行处理语句2,跳至至ENDDSL;当不满满足当不满足条条件判断断2 时,程序序继续向下下执下,当当读到OTHHER 操作码时时,无条条件运行处理语句句3(即当当程序当当前不满满足以上上所以条条件判断断时,则执行OTHHER 之后的的语句。处理语句允允许有很多多句;条件判断可可以写得得很复杂杂,也允允许对不同同的字段段进行判断断;比如如说C 语言也有有分支语语句swittch,但但是这个语句只能能对一个字字段进行分支支判断,ILE 语言与它不同,允许对不同的字段
5、进行判判断就我目前掌掌握的测测试情况况,上述述的SEELECCTWWHENN-OOTHEEREENDSSL,其其实也可以以写做:IF 条件件判断11处理语句11ELSEIIF 条条件判断断2处理语句22ELSE处理语句33ENDIFF即WHENN 与ELSSEIFF 是类似的,这这样说,应该可以以明白了了吧。总之,SEELECCTEENDSSL 是是一个很很好用的的语法,尤尤其是在在表示很很多不同同的分支支处理时。OUT (E) (Wriite a DDataa Arrea)没用过,讲讲数据域域的。PARM (Iddenttifyy Paarammeteers) 定义入口参参数Factoory
6、 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQR*ENTRRY PPLISSTPARM FLDD01关于具体内内容讲解,详见见前面所所说“入口口参数”一一章。允许做为入入口参数数的有:普通变变量、结构变量、数数组变量关于PARRM、PLIIST,还有一种在Facctorry 11, Faactoory 2 也也填写变变量或指指示器的的用法,不过我我不知道道它具体体表示什什么意思,也也不知道道该怎么用。请用过的来补充。PLISTT (IIdenntiffy aa Paarammeteer LListt) 同同上POST (EE) (Poost)
7、没用过READ (NN | E) (RReadd a Reccordd) 读读取记录1. 基本本语法:Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQREAD 文件记录录格式名名45 46READ后后面跟的的,必须须是声明明的文件件记录格式式名;LO 指示示器表示示锁表指示示器,当当在指定定的时间(CHGGPF,WAIITRCCD 项项可看到到),需要读取的的记录仍被被锁,将会会打开LO 指示器器,即*IN445=1;EQ指示器器为是否读到指示示器。当当未读到任何何记录时时,打开EQ 指示器器,即*IN446=12. 当文文件在
8、程程序中,是是用只读读的方式式声明时时,REAAD 操操作并不不会造成成锁表;如果文件在在程序中中是用修修改的方方式声明明,REEAD 操作成成功后,该记录被锁;直到执行解锁操作作(UNNLOCCK,或或UPDDATEE),或或REAAD 该该文件的的其它记记录,才才会解锁锁如果文件是是用修改改的方式式声明,但但希望RREADD 操作作不锁表时,那么就用REEAD(N),即Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQREAD(N) 文件记录录格式名名45 46这样读文件件,就不不会锁记记录,但但是同时时也不能能修改记记录。如
9、如果需要要修改记记录,那那么在修改之前前(包括括对文件字字段赋值值之前),还必须再对该记录进行一次定位操作(比如CHAINN、REAAD 语语句均可可)。也也就是说说,如果果要修改改记录,必必须先锁住当前前记录(很很合理吧)3. 当执执行REAAD 操操作时,程序序是根据据游标当前在在文件中中所指向向的位置置,顺序读取下一条记录。关于游标是如何何指向,还不是一个很简单的问题,所以将会在下一章“数据库相关知知识”中具具体讲解。4. 执行行REAAD 操操作时,允许声明的的文件没没有键值值。(即即PF 文件)READCC (E) (RReadd Neext Chaangeed RRecoord)没
10、用过,读读下一次次修改过过的记录?READEE (N | E) (Reaad EEquaal KKey) 读取键值相等等的记录录语法与REEAD 操作码大致一一样,这里不再再重复,只说不同的的:假设程序中中已声明明逻辑文件件PFFFHSLL3(键值为为FHSS01+FHSS02)Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQFHSKEEY KKLISSTKFLD FLDD01KFLD FLDD02FHSKEEY SSETLLL FFMTFFHSDOW 11=1FHSKEEY RREADDE FFMTFFHS 15IF *IIN
11、155=11LEAVEEENDIFFENDDOO这段话的意意思,就就是定义义组合键值FHHSKEEY,然然后根据据这个FHSSKEYY 在逻辑文件件PFFHSSL3 中去定定位,循循环读取PFFFHSLL3 中中,FHHS011、FHSS03 与FLDD01、FLDD02相相等的记记录。当读取取记录结结束,或或键值不等等时,退出出循环(*INN15 是EQ 指示器器)。如如果将RREADDE 操操作码换成RREADD 操作作码的话(当然然,Faactoory 1 处处也就不不能有值值),就就没有“键值不等等时退出循环”这一一层意思,只只是读不到记录录时就退退出循环环,但有有时我们使用逻辑辑文件
12、,仅仅仅是需需要它的排序,而而不需要要读不到键值值相等的的记录就退退出循环环。所以以说,使用用REAAD 操操作码,还是READDE 操操作码,需要要根据实实际的要要求来决决定。以上的Faactoory 1 处处填写值的系统处处理,当当REAADE 操作码在Facctorry 11 处未填写写值时,系统实际上上是将当当前的值值与读到的上上一条记记录的关键字进行比较,而不不是与SSETLLL 时时的键值做比较(读第一条条记录不做做比较!),如如果键值值不等时,置EQQ 指示示器为1。也也就是说说,如果没有与与FHSSKEYY 键值值相同的的录,那么系统并不是是直接找找开EQ 指示器器,而是是会一
13、直直保持正常地往往下读,直到到找到与与读到的第第一条记记录关键键字不同同的记录录,才会会打开EQ 指示器器,所以要注意意。READPP (N | E) (Reaad PPrioor RRecoord) 读取记录游标上移简单来说,REAAD、READDE 操操作时,游标在数据据文件中中,是下下移的;即读完第一一条记录,游标指指向第二二条记录录;读完第二二条记录录,游标指向第第三条记记录,依依此类推,直直至最后后一条记录。但但REAADP 则正好相相反,游游标是上移移的,即即读完第三三条记录录后,游游标指向第第二条记记录;读完第第二条记记录后,游游标指向第第一条记记录,直直至读完第一一条记录录。一
14、般来说,用用REAAD、REAADE 的概率率会比RREADDP、REAADPEE 的概概率高得得多,不不过在某些情况下下,使用用REAADP 操作,又又的确会会很省事事,这个一时间间想不起起例子来来,大家家可在编编程序时多实实践。READPPE (N | EE) (Reead Priior Equual)虽然我没用用过,但猜猜想它应应该就是是指游标标上移,按按键值去读取文件件。与RREADDP 的的关系,就类似于RREADDE 与与REAAD 的的关系。REALLLOC (EE) (Ree-allloccatee Sttoraage)没用过REL (E) (Relleasse)没用过RESE
15、TT (E) (RReseet)将数据结构构赋值成为初始值。注意是初始始值,不是是清空。如定义结构构:D FHSSDS DSD FHSS01 10 INZZ(ABBCD)D FHSS02 5 IINZ(EFFGH)那么,不管管对该结结构如何何赋值,当当执行语句:C RESSET FHSSDS之后,FHHS011 将会会变成ABBCD,FHSS02 将会变成EFFGH,即恢恢复成为初始值。RETURRN (H | MM | R) (RRetuurn to Calllerr)RETURRN 是是程序结结束。在前面,“简单的程序流程”中,我们讲过,“SETON LR” 与RETURN 这两句话一起,
16、做为程程序的结结束。这里,再再详细解释一下两两者之间间的区别,以及及关系:如果不写RRETUURN,只写写“SEETONN LRR”,程程序执行完最最后一句句之后,将将会再从从第一句开始执行行,造成成死循环环。在简单单的程序序流程这这个例子子中,程程序原来来只想修修改读到的第第一条记录,而如如果没有有RETTURNN 的话,将会会把所有有的记录录都修改改掉,直直到最后后找不到到可修改改的记录,然后后系统报报错,异异常中断断。(这这种离奇奇的现象现在又测试试不到了了,可能能是当时时写错程序了?把FF 写成成了P?不管管它,当当是我写写错了,总之RETTURNN 是表表示程序序结束,没没有RETU
17、RRN,主主程序无无可执行的语句时,它也也会结束;如如果REETURRN 出出现在主程程序的中中间,那么RETTURNN 后面面的语句将不不会执行)如果只写RRETUURN,不不打开指示器器*INNLR,根根据blloglliouu 所说 “程序序不会强强制将内内存中的数据写写到磁盘盘中。4000 缺缺省的是是BLOOCK 输出,即即数据记记录满一一个BLLOCKK 块时时才会将将这一组记录录写到磁磁盘上。那那么如果这时时BLOOCK 没满,数据据信息不不会立刻刻写到磁磁盘上。之之后有其它作业业用到该文件,读读取的数数据就不不完整。”但如果文件件有唯一一键字,或或记录日志志,必须须同步写时,其
18、实BLOOCK 实际被忽忽略,也也就是此时不会会有错。目前前我们用的是是MIMMIX 备份,客客户实际际上将所所有的文文件都列列入日志志,这时不写也不不会出现现上述错误误。但为避免一一些潜在在的问题题,养成良好好的编程风格,建建议将SETONN LRR 与RETTURNN 一同同,做为为程序结束的标志。当当然,如如果某个个程序频频繁被调用,且且不涉及文 操作时时,可考考虑不打开指示器器*INNLR,仅用RETTURNN 作为结束,这样样程序不不会被PURRGE 出内存存,可提提高调用效率率。如果没写RRETUURN,也也没有打打开指示器器*INNLR,在在编译时时,系统将会报40 级错,说找不
19、到程序结结束的语句,所所以大可可放心。ROLBKK (E) (RRolll Baack)1. 基本本语法Factoory 1 OOperratiion Facctorry 22 ReesulltROLBKK2. 该操操作码无其它它参数,就就是指对对事务处理进行回滚操作。3. ILLE 程程序中,ROLBK 操作可随时进行,也允许在没有声明COMMIT 类型的文件的情况下,仍仍进行ROLLBK 操作(对对该进程程这前的事事务进行确确认处理)f4. 关于于日志的的确认回滚操作,在在后面会会另设专专门章节讲述。2.8.44.5 S-Z SCAN (EE) (Sccan Chaaraccterr St
20、trinng) 扫描字符符串扫描字符或或字符串串Facctorry 11 在目目标字符串串Facctorry 22 中是是否存在在Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQFLD011 SCCAN FLDD02 N 226FLD011 可以以是字符符,也可可以是字字符变量;可可以是一一位长,也可可以是多多位长。当FLD001 在在FLDD02 中存在在时,EQ 指示器器打开,即*IIN266=11,同同时将FLDD02 中的起起始位置,赋值值给N;当FLD001 在在FLDD02 中不存存在时,EQ 指示器器保持关关闭状态
21、,即*IIN266=00,同同时N=00允许从FLLD022 中的的指定位位置开始检查:FLD011 SCCAN FLDD02:2 NN 266如上句,即即表示从从FLDD02 的第2 位,开始扫描。在实际使用用中,比比如说我们判断某某个字符符是否为为数字,就就可以先先定义一个09 的的常量,然后将要判判断的字字符去SSCANN 一下下这个常量量SELECCT (Beggin a SSeleect Grooup) 分支支语句在操作码“OTHHER”中中讲过,为方便读者,列列出简单单语法如如下:Factoory 1 OOperratiion Facctorry 22 Reesullt HHI L
22、LO EEQSELECCTWHEN 条件判判断1处理语句11WHEN 条件判判断2处理语句22OTHERR处理语句33ENDSLL要注意,SSELEECT 操作码,必须有对应的ENDDSL 操作码,否则编编译无法法通过。SETGTT (E) (SSet Greeateer TThann) 定定位操作作大于举个例子吧吧,假设设文件中中有一个个字段,是是标识顺顺序号的的,1、2、3、4。即该字段为1,表示第一条条记录,该字段为2,表示示第2 条记录。那那么:Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQ2 SETTGT 文件记录录
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RPG AS400程序员培训手册7099 AS400 程序员 培训 手册 7099
限制150内