RPGAS400程序员培训手册精品资料

上传人:枫** 文档编号:513927504 上传时间:2023-11-26 格式:DOC 页数:10 大小:58.50KB
返回 下载 相关 举报
RPGAS400程序员培训手册精品资料_第1页
第1页 / 共10页
RPGAS400程序员培训手册精品资料_第2页
第2页 / 共10页
RPGAS400程序员培训手册精品资料_第3页
第3页 / 共10页
RPGAS400程序员培训手册精品资料_第4页
第4页 / 共10页
RPGAS400程序员培训手册精品资料_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《RPGAS400程序员培训手册精品资料》由会员分享,可在线阅读,更多相关《RPGAS400程序员培训手册精品资料(10页珍藏版)》请在金锄头文库上搜索。

1、2.844O-RON-ERROR(On-Error)没用过OPEN(E)(OpenFileforProcessing)打开文件Factory1OperationFactory2ResultHILOEQOPEN文件名OPEN后面的目标,必须是在当前程序中已声明的文件名(不是文件的记录格式名),而且在OPEN操作之后,在程序结束之前之前,必须有对应的CLOSE操作。使用OPEN操作,文件在声明时,必须使用USROPN关键字详见D行说明)。ORxx(Or)逻辑判断一或Factory1OperationFactory2ResultHILOEQFLD01IFGTFLD03FLD01OREQFLD02等价

2、于IFFLD01FLD03ORFLD01=FLD02与IF、IFxx,AND、ANDxx类似,RPGLE的写法OR,比RPG的写法ORxx要灵活,而且可以用来表达一些复杂的逻辑关系。有鉴于此,所以通常IF语句中,我会以OR为主,基本不用ORxx。如果在编程序方面,公司/项目组无硬性要求,那我觉得还是少用ORxx吧,总觉得这种写法的逻辑关系看起来不直接,尤其是有很复杂的AND,OR时。OTHER(OtherwiseSelect)分支语句的判断与分支语句SELECT一起使用,表示不符合上述所有条件时的操作,如下:Factory1OperationFactory2ResultHILOEQSELECT

3、WHEN条件判断1处理语句1WHEN条件判断2处理语句2OTHER处理语句3ENDSL在这个例子中,当满足条件判断1时,运行处理语句1,运行结束后跳至ENDSL处;如果不满足条件判断1,则程序继续向下执行,判断是否满足条件判断2。当满足条件判断2时,运行处理语句2,跳至ENDSL;当不满足当不满足条件判断2时,程序继续向下执下,当读到0THER操作码时,无条件运行处理语句3(即当程序当前不满足以上所以条件判断时,则执行OTHER之后的语句。处理语句允许有很多句;条件判断可以写得很复杂,也允许对不同的字段进行判断;比女口说C语言也有分支语句switch,但是这个语句只能对一个字段进行分支判断,I

4、LE语言与它不同,允许对不同的字段进行判断就我目前掌握的测试情况,上述的SELECTWHEN-OTHERENDSL,其实也可以写做:IF条件判断1处理语句1ELSEIF条件判断2处理语句2ELSE处理语句3ENDIF即WHEN与ELSEIF是类似的,这样说,应该可以明白了吧总之,SELECTENDSL是一个很好用的语法,尤其是在表示很多不同的分支处理时OUT(E)(WriteaDataArea)没用过,讲数据域的。PARM(IdentifyParameters)定义入口参数Factory1OperationFactory2ResultHILOEQR*ENTRYPLISTPARMFLD01关于具

5、体内容讲解,详见前面所说入口参数”一章。允许做为入口参数的有:普通变量、结构变量、数组变量关于PARM、PLIST,还有一种在Factory1,Factory2也填写变量或指示器的用法,不过我不知道它具体表示什么意思,也不知道该怎么用。请用过的来补充。1. PLIST(IdentifyaParameterList)同上POST(E)(Post)没用过READ(N|E)(ReadaRecord)读取记录基本语法:2. Factory1OperationFactory2ResultHILOEQREAD文件记录格式名4546READ后面跟的,必须是声明的文件记录格式名;LO指示器表示锁表指示器,当在

6、指定的时间CHGPF,WAITRCD项可看到),需要读取的记录仍被锁,将会打开LO指示器,即*IN45=1;EQ指示器为是否读到指示器。当未读到任何记录时,打开EQ指示器,即*IN46=1当文件在程序中,是用只读的方式声明时,READ操作并不会造成锁表;如果文件在程序中是用修改的方式声明,READ操作成功后,该记录被锁;直至执行解锁操作(UNLOCK,或UPDATE),mREAD该文件的其它记录,才会解锁如果文件是用修改的方式声明,但希望READ操作不锁表时,那么就用READN),即Factory1OperationFactory2ResultHILOEQREAD(N)文件记录格式名4546这

7、样读文件,就不会锁记录,但是同时也不能修改记录。如果需要修改记录,那么在修改之前(包括对文件字段赋值之前),还必须再对该记录进行一次定位操作(比如CHAIN、READ语句均可)。也就是说,如果要修改记录,必须先锁住当前记录(很合理吧)当执行READ操作时,程序是根据游标当前在文件中所指向的位置,顺序读取下一条记录。关于游标是如何指向,还不是一个很简单的问题,所以将会在下一章数据库相关知识”中具体讲解。执行READ操作时,允许声明的文件没有键值。(艮IPF文件)READC(E)(ReadNextChangedRecord)没用过,读下一次修改过的记录?READE(N|E)(ReadEqualKe

8、y)读取键值相等的记录语法与READ操作码大致一样,这里不再重复,只说不同的:假设程序中已声明逻辑文件PFFHSL3键值为FHS01+FHS02)Factory1OperationFactory2ResultHILOEQFHSKEYKLISTKFLDFLD01KFLDFLD02FHSKEYSETLLFMTFHSDOW1=1FHSKEYREADEFMTFHS15IF*IN15=1LEAVEENDIFENDDO这段话的意思,就是定义组合键值FHSKEY,然后根据这个FHSKEY在逻辑文件PFFHSL3中去定位,循环读取PFFHSL3中,FHSO1、FHS03与FLDO1、FLD02相等的记录。当读

9、取记录结束,或键值不等时,退出循环*IN15是EQ指示器)。如果将READE操作码换成READ操作码的话(当然Factory1处也就不能有值),就没有键值不等时退出循环”这一层意思,只是读不到记录时就退出循环,但有时我们使用逻辑文件,仅仅是需要它的排序,而不需要读不到键值相等的记录就退出循环。所以说,使用READ操作码,还是READE操作码,需要根据实际的要求来决定。以上的Factory1处填写值的系统处理,当READE操作码在Factory1处未填写值时,系统实际上是将当前的值与读到的上一条记录的关键字进行比较,而不是与SETLL时的键值做比较读第一条记录不做比较!),如果t值不等时,置EQ

10、指示器为1。也就是兑,如果没有与FHSKEY键值相同的录,那么系统并不是直接找开EQ指示器,而是会一直保持正常地往下读,直到找到与读到的第一条记录关键字不同的记录,才会打开EQ指示器,所以要注意。READP(N|E)(ReadPriorRecord)读取记录一游标上移简单来说,READ、READE操作时,游标在数据文件中,是下移的;即读完第一条记录,游标指向第二条记录;读完第二条记录,游标指向第三条记录,依此类推,直至最后一条记录。但READP则正好相反,游标是上移的,即读完第三条记录后,游标指向第二条记录;读完第二条记录后,游标指向第一条记录,直至读完第一条记录。一般来说,用READ、REA

11、DE的概率会比READP、READPE的概率高得多,不过在某些情况下,使用READP操作,又的确会很省事,这个一时间想不起例子来,大家可在编程序时多实践。READPE(N|E)(ReadPriorEqual)虽然我没用过,但猜想它应该就是指游标上移,按键值去读取文件。与READP的关系,就类似于READE与READ的关系。REALLOC(E)(Re-allocateStorage)没用过REL(E)(Release)没用过RESET(E)(Reset)将数据结构赋值成为初始值。注意是初始值,不是清空。如定义结构:DFHSDSDSDFHS0110INZABCD)DFHS025INZEFG那么,不

12、管对该结构如何赋值,当执行语句:CRESETFHSDS之后,FHS01将会变成ABCDFHS02将会变成EFGH即恢复成为初始值。RETURN(H|M|R)(ReturntoCaller)RETURN是程序结束。在前面,简单的程序流程”中,我们讲过,SETONLR”与RETURN这两句话一起,做为程序的结束。这里,再详细解释一下两者之间的区别,以及关系:如果不写RETURN,只写SETONLR”,程序执行完最后一句之后,将会再从第一句开始执行,造成死循环。在简单的程序流程这个例子中,程序原来只想修改读到的第一条记录,而如果没有RETURN的话,将会把所有的记录都修改掉,直到最后找不到可修改的记

13、录,然后系统报错,异常中断。这种离奇的现象现在又测试不到了,可能是当时写错程序了?把F写成了P?不管它,当是我写错了,总之RETURN是表示程序结束,没有RETURN,主程序无可执行的语句时,它也会结束;如果RETURN出现在主程序的中间,那么RETURN后面的语句将不会执行)如果只写RETURN,不打开指示器*INLR,根据blogliou所说程序不会强制将内存中的数据写到磁盘中。400缺省的是BLOCK输出,即数据记录满一个BLOCK块时才会将这一组记录写到磁盘上。那么如果这时BLOCK没满,数据信息不会立刻写到磁盘上。之后有其它作业用到该文件,读取的数据就不完整。”但如果文件有唯一键字,

14、或记录日志,必须同步写时,其实BLOCK实际被忽略,也就是此时不会有错。目前我们用的是MIMIX备份,客户实际上将所有的文件都列入日志,这时不写也不会出现上述错误。但为避免一些潜在的问题,养成良好的编程风格,建议将SETONLR与RETURN一同,做为程序结束的标志。当然,如果某个程序频繁被调用,且不涉及文操作时,可考虑不打开指示器*INLR,仅用RETURN作为结束,这样程序不会被PURGE出内存,可提高调用效率。如果没写RETURN,也没有打开指示器*INLR,在编译时,系统将会报40级错,说找不到程序结束的语句,所以大可放心。1. ROLBK(E)(RollBack)基本语法Factor

15、y1OperationFactory2ResultROLBK该操作码无其它参数,就是指对事务处理进行回滚操作。2. ILE程序中,ROLBK操作可随时进行,也允许在没有声明COMMIT类型的文件的情况下,仍进行ROLBK操作对该进程这前的事务进行确认处理)f关于日志的确认回滚操作,在后面会另设专门章节讲述。2.845S-ZSCAN(E)(ScanCharacterString)扫描字符串扫描字符或字符串Factory1在目标字符串Factory2中是否存在Factory1OperationFactory2ResultHILOEQFLD01SCANFLD02N26FLD01可以是字符,也可以是字

16、符变量;可以是一位长,也可以是多位长。当FLD01在FLD02中存在时,EQ指示器打开,即*IN26=1,同时将FLD02中的起始位置,赋值给N;当FLD01在FLD02中不存在时,EQ指示器保持关闭状态,踽N26=0同时N=0允许从FLD02中的指定位置开始检查:FLD01SCANFLD02:2N26如上句,即表示从FLD02的第2位,开始扫描。在实际使用中,比如说我们判断某个字符是否为数字,就可以先定义一个09的常量,然后将要判断的字符去SCAN一下这个常量SELECT(BeginaSelectGroup)分支语句在操作码OTHER”中讲过,为方便读者,列出简单语法如下:Factory1OperationFactory2ResultHILOEQSELECTWHEN条件判断1处理语句1WHEN条件判断2处理语句2OTHER处理语句3ENDSL要

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号