2.8.4.4 O--R
ON-ERROR (On-Error)
没用过
OPEN {(E)} (Open File for Processing) 翻开文件
Factory 1 Operation Factory 2 Result HI LO EQ
OPEN 文件名
OPEN 后面的目标,必需是在当出息序中已声明的文件名〔不是文件的记录格式名〕,
并且在OPEN 操作之后,在程序结束之前之前,必需有对应的CLOSE 操作。
使用OPEN 操作,文件在声明时,必需使用USROPN 关键字〔详见D 行说明〕。
ORxx (Or) 逻辑判断—或
Factory 1 Operation Factory 2 Result HI LO EQ
FLD01 IFGT FLD03
FLD01 OREQ FLD02
等价于
IF FLD01>FLD03 OR FLD01=FLD02
与IF、IFxx,AND、ANDxx 类似,RPGLE 的写法OR,比RPG 的写法ORxx 要灵活,
并且可以用来表达一些复杂的逻辑关系。有鉴于此,所以通常IF 语句中,我会以OR 为主,
底子不消ORxx。如果在编程序方面,公司/工程组无硬性要求,那我觉得还是少用ORxx 吧,
总觉得这种写法的逻辑关系看起来不直接,尤其是有很复杂的AND,OR 时。
程序员培训机构去到极客时间OTHER (Otherwise Select) 分支语句的判断
与分支语句SELECT 一起使用,暗示不符合上述所有条件时的操作,如下:
Factory 1 Operation Factory 2 Result HI LO EQ
SELECT
WHEN 条件判断1
处置语句1
WHEN 条件判断2
处置语句2
OTHER
处置语句3
ENDSL
在这个例子中,当满足条件判断1 时,运行处置语句1,运行结束后跳至ENDSL 处;
如果不满足条件判断1,那么程序继续向下执行,判断是否满足条件判断2。
当满足条件判断2 时,运行处置语句2,跳至ENDSL;当不满足
当不满足条件判断2 时,程序继续向下执下,当读到OTHER 操作码时,无条件运
行处置语句3〔即当程序当前不满足以上所以条件判断时,那么执行OTHER 之后的语句。
处置语句允许有很多句;
条件判断可以写得很复杂,也允许对不同的字段进行判断;比方说C 语言也有分支语
句switch,但是这个语句只能对一个字段进行分支判断,ILE 语言与它不同,允许对不同的
字段进行判断
就我目前掌握的测试情况,上述的SELECT—WHEN--OTHER—ENDSL,其实也可以
写做:
IF 条件判断1
处置语句1
ELSEIF 条件判断2
处置语句2
ELSE
处置语句3
ENDIF
即WHEN 与ELSEIF 是类似的,这样说,应该可以大白了吧。
总之,SELECT—ENDSL 是一个很好用的语法,尤其是在暗示很多不同的分支处置时。
OUT {(E)} (Write a Data Area)
没用过,讲数据域的。
PARM (Identify Parameters) 定义入口参数
Factory 1 Operation Factory 2 Result HI LO EQR
*ENTRY PLIST
PARM FLD01
关于具体内容讲解,详见前面所说“入口参数〞一章。
允许做为入口参数的有:普通变量、布局变量、数组变量
关于PARM、PLIST,还有一种在Factory 1, Factory 2 也填写变量或指示器的用
法,不外我不知道它具体暗示什么意思,也不知道该怎么用。请用过的来补充。
PLIST (Identify a Parameter List) 同上
POST {(E)} (Post)
没用过
READ {(N | E)} (Read a Record) 读取记录
1. 底子语法:
Factory 1 Operation Factory 2 Result HI LO EQ
READ 文件记录格式名 45 46
READ后面跟的,必需是声明的文件记录格式名;
LO 指示器暗示锁表指示器,当在指定的时间〔CHGPF,WAITRCD 项可看到〕,
需要读取的记录仍被锁,将会翻开LO 指示器,即*IN45=’1’;
EQ指示器为是否读到指示器。当未读到任何记录时,翻开EQ 指示器,即*IN46=’1’
2. 当文件在程序中,是用只读的方式声明时,READ 操作并不会造成锁表;
如果文件在程序中是用点窜的方式声明,READ 操作成功后,该记录被锁;直到执
行解锁操作〔UNLOCK,或UPDATE〕,或READ 该文件的其它记录,才会解锁
如果文件是用点窜的方式声明,但但愿READ 操作不锁表时,那么就用READ〔N〕,
即
Factory 1 Operation Factory 2 Result HI LO EQ
READ(N) 文件记录格式名 45 46
这样读文件,就不会锁记录,但是同时也不克不及点窜记录。如果需要点窜记录,那么
在点窜之前〔包罗 对文件字段赋值之前〕,还必需再对该记录进行一次定位操作〔比方
CHAIN、READ 语句均可〕。也就是说,如果要点窜记录,必需先锁住当前记录〔很合
理吧〕
3. 当执行READ 操作时,程序是按照 游标当前在文件中所指向的位置,挨次读取下
一笔记录。关于游标是如何指向,还不是一个很简单的问题,所以将会鄙人一章“数
据库相关常识〞中具体讲解。
4. 执行READ 操作时,允许声明的文件没有键值。〔即PF 文件〕
READC {(E)} (Read Next Changed Record)
没用过,读下一次点窜正的记录?
READE {(N | E)} (Read Equal Key) 读取键值相等的记录
语法与READ 操作码大致一样,这里不再重复,只说不同的:
假设程序中已声明逻辑文件PFFHSL3〔键值为FHS01+FHS02〕
Factory 1 Operation Factory 2 Result HI LO EQ
FHSKEY KLIST
KFLD FLD01
KFLD FLD02
FHSKEY SETLL FMTFHS
DOW 1=1
FHSKEY READE FMTFHS 15
IF *IN15=’1’
LEAVE
ENDIF
ENDDO
这段话的意思,就是定义组合键值FHSKEY,然后按照 这个FHSKEY 在逻辑文件
PFFHSL3 中去定位,循环读取PFFHSL3 中,FHS01、FHS03 与FLD01、FLD02 相等的记
录。当读取记录结束,或键值不等时,退出循环〔*IN15 是EQ 指示器〕。如果将READE 操
作码换成READ 操作码的话〔当然,Factory 1 处也就不克不及有值〕,就没有“键值不等时退出
循环〞这一层意思,只是读不到记录时就退出循环,但有时我们使用逻辑文件,仅仅是需要
它的排序,而不需要读不到键值相等的记录就退出循环。所以说,使用READ 操作码,还
是READE 操作码,需要按照 实际的要求来决定。
以上的Factory 1 处填写值的系统处置,当READE 操作码在Factory 1 处未填写值时,
系统实际上是将当前的值与读到的上一笔记录的关键字进行比较,而不是与SETLL 时的键
值做比较〔读第一笔记录不做比较!〕,如果键值不等时,置EQ 指示器为1。。也就是说,
如果没有与FHSKEY 键值不异的录,那么系统并不是直接开EQ 指示器,而是会一直保
持正常地往下读,直到到与读到的第一笔记录关键字不同的记录,才会翻开EQ 指示器,
所以要注意。
READP {(N | E)} (Read Prior Record) 读取记录—游标上移
简单来说,READ、READE 操作时,游标在数据文件中,是下移的;即读完第一笔记
录,游标指向第二笔记录;读完第二笔记录,游标指向第三笔记录,依此类推,直至最后一
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论