RPG AS400程序员培训手册15419.docx
《RPG AS400程序员培训手册15419.docx》由会员分享,可在线阅读,更多相关《RPG AS400程序员培训手册15419.docx(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2.8.4.4 O-R ON-ERRROR (On-Erroor)没用过OPEN (E) (OOpen Filee forr Proocesssing) 打开文件Factoory 11 Opeeratiion FFactoory 22 Ressult HI LLO EQQOPEN 文件名OPEN 后面的目目标,必须是在当前前程序中已已声明的文文件名(不不是文件的的记录格式名名),而且在OPPEN 操操作之后,在在程序结束之前之之前,必须须有对应的CLOSSE 操作作。使用OPEEN 操作作,文件在在声明时,必须使用USRROPN 关键字(详见D 行说明)。ORxx (Or) 逻辑判断或Fact
2、oory 11 Opeeratiion FFactoory 22 Ressult HI LLO EQQFLD011 IFGGT FLLD03FLD011 OREEQ FLLD02等价于IF FLLD01FLD003 ORR FLDD01=FFLD022与IF、IIFxx,AND、ANDxxx 类似,RPGGLE 的的写法ORR,比RPGG 的写法法ORxxx 要灵活活,而且可以用用来表达一一些复杂的逻辑关系。有有鉴于此,所所以通常IIF 语句中,我我会以ORR 为主,基本不用OORxx。如如果在编程序方面面,公司/项目组无硬性要要求,那我我觉得还是少用ORRxx 吧吧,总觉得这种种写法的逻辑辑
3、关系看起起来不直接接,尤其是是有很复杂杂的AND,OR 时时。OTHERR (Ottherwwise Seleect) 分支语句的判断断与分支语句句SELEECT 一一起使用,表表示不符合合上述所有有条件时的操作,如如下:Factoory 11 Opeeratiion FFactoory 22 Ressult HI LLO EQQSELECCTWHEN 条件判断断1处理语句11WHEN 条件判断断2处理语句22OTHERR处理语句33ENDSLL在这个例子子中,当满满足条件判判断1 时,运行处理语句1,运行结束后跳至至ENDSSL 处;如果不满足足条件判断断1,则程序继续向下执行,判断断是否满
4、足条件判判断2。当满足条件件判断2 时,运行处理语句2,跳至ENNDSL;当不满足当不满足条条件判断22 时,程序继续续向下执下,当读到OTHEER 操作作码时,无条条件运行处理语句句3(即当程程序当前不不满足以上所所以条件判判断时,则执行OTHEER 之后后的语句。处理语句允允许有很多句句;条件判断可可以写得很很复杂,也允允许对不同的的字段进行判断;比如说C 语言也有分分支语句swittch,但但是这个语句只能对一个字段段进行分支判判断,ILLE 语言与它不不同,允许许对不同的的字段进行判判断就我目前掌掌握的测试试情况,上上述的SEELECTTWHEEN-OOTHERRENDDSL,其其实也
5、可以写做:IF 条件件判断1处理语句11ELSEIIF 条件件判断2处理语句22ELSE处理语句33ENDIFF即WHENN 与ELSEEIF 是是类似的,这样样说,应该可以明明白了吧。总之,SEELECTTENDDSL 是是一个很好好用的语法,尤其其是在表示示很多不同同的分支处处理时。OUT (E) (Wrrite a Daata AArea)没用过,讲讲数据域的的。PARM (Ideentiffy Paarameeterss) 定义入口参数数Factoory 11 Opeeratiion FFactoory 22 Ressult HI LLO EQQR*ENTRRY PLLISTPARM
6、FLD001关于具体内内容讲解,详见前面所所说“入口参参数”一章章。允许做为入入口参数的的有:普通通变量、结构变量、数组变变量关于PARRM、PLISST,还有一种在Facttory 1, Facctoryy 2 也也填写变量或指示示器的用法,不过我我不知道它它具体表示示什么意思,也也不知道该该怎么用。请用过的来补充。PLISTT (Iddentiify aa Parrametter LList) 同上POST (E) (PPost)没用过READ (N | E) (RRead a Reecordd) 读取记录1. 基本本语法:Factoory 11 Opeeratiion FFactoory
7、 22 Ressult HI LLO EQQREAD 文件记录格式名名45 446READ后后面跟的,必必须是声明的的文件记录录格式名;LO 指示示器表示锁锁表指示器器,当在指指定的时间(CHGPPF,WAITTRCD 项可看到),需要读取的的记录仍被锁,将会打打开LO 指示示器,即*IN455=1;EQ指示器器为是否读到指示器器。当未读读到任何记录录时,打开EQ 指示示器,即*IN466=12. 当文文件在程序序中,是用用只读的方式声声明时,READD 操作并并不会造成成锁表;如果文件在在程序中是是用修改的的方式声明明,REAAD 操作作成功后,该记录被锁;直到执行解锁操作作(UNLLOCK
8、,或或UPDAATE),或或READD 该文件的其其它记录,才会会解锁如果文件是是用修改的的方式声明明,但希望望READD 操作不不锁表时,那么就用REAAD(N),即Factoory 11 Opeeratiion FFactoory 22 Ressult HI LLO EQQREAD(N) 文文件记录格式名名45 446这样读文件件,就不会会锁记录,但但是同时也不能修修改记录。如果果需要修改改记录,那么在修改之前前(包括对对文件字段段赋值之前),还还必须再对该记录录进行一次次定位操作作(比如CHAINN、READD 语句均可)。也也就是说,如果要要修改记录录,必须先锁住当前记录录(很合理吧)
9、3. 当执执行READD 操作时,程序是是根据游标标当前在文文件中所指指向的位置置,顺序读取下一条记录。关于游标是如何指指向,还不是一个个很简单的问题,所以以将会在下下一章“数数据库相关知知识”中具体体讲解。4. 执行行READD 操作时,允许声明的文文件没有键键值。(即即PF 文件件)READCC (EE) (Readd Nexxt Chhangeed Reecordd)没用过,读读下一次修修改过的记录?READEE (NN | EE) (Readd Equual KKey) 读取键值相等的的记录语法与REEAD 操操作码大致一样,这里不再重重复,只说不同的:假设程序中中已声明逻逻辑文件PF
10、FFHSL33(键值为FHHS01+FHS002)Factoory 11 Opeeratiion FFactoory 22 Ressult HI LLO EQQFHSKEEY KLLISTKFLD FLD001KFLD FLD002FHSKEEY SEETLL FMTFFHSDOW 11=1FHSKEEY REEADE FMTFFHS 115IF *IIN15=1LEAVEEENDIFFENDDOO这段话的意意思,就是是定义组合键值FHSSKEY,然然后根据这这个FHSKKEY 在在逻辑文件PFFHSSL3 中中去定位,循循环读取PFFHHSL3 中,FHSS01、FHS003 与FLD001
11、、FLD002相等的的记录。当读取取记录结束,或或键值不等时,退出循循环(*IN115 是EQ 指示示器)。如如果将REEADE 操作码换成RREAD 操作码的话(当然,FFactoory 11 处也就不能能有值),就没没有“键值不等时退出循环”这一一层意思,只只是读不到记录时时就退出循循环,但有时我们使用逻辑文件,仅仅仅是需要它的排序,而而不需要读读不到键值相等的的记录就退出出循环。所以说,使用REEAD 操操作码,还是READDE 操作作码,需要根根据实际的要求求来决定。以上的Faactorry 1 处填写值的系统处理,当当READDE 操作作码在Facttory 1 处未填写值时时,系统
12、实际上上是将当前前的值与读到的上一一条记录的关键字进行比较,而不是是与SETTLL 时时的键值做比较(读第一条记录录不做比较!),如如果键值不等时,置EQ 指示器为1。也就就是说,如果没有与与FHSKKEY 键键值相同的的录,那么系统并不是直直接找开EQ 指示示器,而是是会一直保保持正常地往往下读,直到找找到与读到的第一一条记录关关键字不同同的记录,才会会打开EQ 指示示器,所以要注意意。READPP (NN | EE) (Readd Priior RRecorrd) 读读取记录游标上移简单来说,READD、READEE 操作时,游标在数据文文件中,是是下移的;即读完第一条条记录,游标指指向第
13、二条条记录;读完第二条条记录,游标指向第三三条记录,依此此类推,直至至最后一条记录。但但READDP 则正好相反反,游标是上移的的,即读完第三条条记录后,游游标指向第二二条记录;读完第第二条记录录后,游标指向第一一条记录,直至至读完第一条条记录。一般来说,用用READD、READDE 的概概率会比RREADPP、READDPE 的的概率高得得多,不过过在某些情况下下,使用RREADPP 操作,又又的确会很很省事,这这个一时间想不起起例子来,大大家可在编编程序时多实实践。READPPE (N | E) (Reaad Prrior Equaal)虽然我没用用过,但猜想想它应该就是指指游标上移,按按
14、键值去读取文件。与与READDP 的关系,就类似于RREADEE 与READD 的关系。REALLLOC (E) (Ree-alllocatte Sttoragge)没用过REL (E) (Reeleasse)没用过RESETT (EE) (Reseet)将数据结构构赋值成为初始值。注意是初始始值,不是清空空。如定义结构构:D FHSSDS DDSD FHSS01 110 INNZ(ABCCD)D FHSS02 55 INZZ(EFGGH)那么,不管管对该结构如如何赋值,当执行语句:C RESSET FFHSDSS之后,FHHS01 将会变成ABCCD,FHS002 将会会变成EFGGH,即即
15、恢复成为初始值。RETURRN (H | M | R) (Retturn to CCalleer)RETURRN 是程程序结束。在前面,“简单的程序流程”中,我们讲过,“SETON LR” 与RETURN 这两句话一起,做为程程序的结束。这里,再详细细解释一下两者者之间的区别,以及关系:如果不写RRETURRN,只写“SSETONN LR”,程程序执行完最后后一句之后后,将会再再从第一句开始执行行,造成死死循环。在简单的程序序流程这个例子中中,程序原原来只想修修改读到的第一一条记录,而如如果没有RRETURRN 的话,将会把把所有的记记录都修改改掉,直到到最后找不不到可修改改的记录,然后后系统
16、报错错,异常中中断。(这这种离奇的的现象现在又测试不到了了,可能是是当时写错程序了?把FF 写成了了P?不管它它,当是我我写错了,总之RETUURN 是是表示程序序结束,没有有RETURRN,主程程序无可执执行的语句时,它也会会结束;如果果RETUURN 出出现在主程序序的中间,那么RETTURN 后面的语句将不会会执行)如果只写RRETURRN,不打打开指示器*IINLR,根根据blooglioou 所说 “程序不不会强制将内存存中的数据写写到磁盘中。4000 缺省的的是BLOOCK 输输出,即数数据记录满满一个BLOOCK 块块时才会将将这一组记录录写到磁盘上。那么如果这时BLOOCK 没
17、没满,数据信信息不会立立刻写到磁磁盘上。之后后有其它作业业用到该文件,读取的数据据就不完整整。”但如果文件件有唯一键键字,或记录录日志,必必须同步写时,其实BLOCCK 实际际被忽略,也也就是此时不会会有错。目前我我们用的是MIIMIX 备份,客户实实际上将所所有的文件件都列入日日志,这时不写也不不会出现上述错误。但为避免一些些潜在的问问题,养成良好的的编程风格,建议将SETONN LR 与RETUURN 一一同,做为为程序结束的标志。当然然,如果某某个程序频频繁被调用,且不涉及文 操作时,可考虑不打开指示器*IINLR,仅用RETUURN 作作为结束,这样程序不不会被PURRGE 出出内存,
18、可可提高调用效率。如果没写RRETURRN,也没没有打开指示器*IINLR,在在编译时,系系统将会报40 级错错,说找不到程序结结束的语句,所以以大可放心心。ROLBKK (EE) (Rolll Bacck)1. 基本本语法Factoory 11 Opeeratiion FFactoory 22 RessultROLBKK2. 该操操作码无其它参参数,就是是指对事务处理进行回滚操作。3. ILLE 程序序中,ROOLBK 操作可随随时进行,也也允许在没有声声明COMMMIT 类型的文件件的情况下,仍仍进行ROLBBK 操作作(对该进进程这前的事务进进行确认处理)f4. 关于于日志的确确认回滚操
19、作,在在后面会另另设专门章节讲述。2.8.44.5 SS-Z SCAN (E) (SScan Charracteer Sttringg) 扫描字符串串扫描字符或或字符串FFactoory 11 在目标字符串Faactorry 2 中是否存存在Factoory 11 Opeeratiion FFactoory 22 Ressult HI LLO EQQFLD011 SCAAN FLLD02 N 266FLD011 可以是是字符,也也可以是字字符变量;可以以是一位长长,也可以以是多位长长。当FLD001 在FLD002 中存存在时,EQ 指示示器打开,即*INN26=1,同同时将FLD002 中的
20、的起始位置,赋值值给N;当FLD001 在FLD002 中不不存在时,EQ 指示示器保持关关闭状态,即*INN26=0,同同时N=0允许从FLLD02 中的指定定位置开始检查:FLD011 SCAAN FLLD02:2 N 26如上句,即即表示从FFLD022 的第2 位,开始扫描。在实际使用用中,比如如说我们判断某个个字符是否否为数字,就就可以先定定义一个099 的常量量,然后将要判判断的字符符去SCAAN 一下下这个常量SELECCT (BBeginn a SSelecct Grroup) 分支语句在操作码“OTHEER”中讲过,为方便读者,列出出简单语法如如下:Factoory 11 O
21、peeratiion FFactoory 22 Ressult HI LLO EQQSELECCTWHEN 条件判断断1处理语句11WHEN 条件判断断2处理语句22OTHERR处理语句33ENDSLL要注意,SSELECCT 操作作码,必须有对应的ENDSSL 操作作码,否则编译译无法通过。SETGTT (EE) (Set Greaater Thann) 定位位操作大于举个例子吧吧,假设文件中有有一个字段段,是标识识顺序号的的,1、2、3、4。即该字段为1,表示第一条条记录,该字段为2,表示第第2 条记录。那么:Factoory 11 Opeeratiion FFactoory 22 Res
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RPG AS400程序员培训手册15419 AS400 程序员 培训 手册 15419
限制150内