欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    RPG AS400程序员培训手册.doc

    • 资源ID:860525       资源大小:119KB        全文页数:18页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    RPG AS400程序员培训手册.doc

    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 语言与它不同,允许对不同的 字段进行判断 就我目前掌握的测试情况,上述的 SELECTWHEN-OTHERENDSL,其实也可以 写做: IF 条件判断 1 处理语句 1 ELSEIF 条件判断 2 处理语句 2 ELSE 处理语句 3 ENDIF 即 WHEN 与 ELSEIF 是类似的,这样说,应该可以明白了吧。 总之,SELECTENDSL 是一个很好用的语法,尤其是在表示很多不同的分支处理时。 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 操作时,游标在数据文件中,是下移的;即读完第一条记 录,游标指向第二条记录;读完第二条记录,游标指向第三条记录,依此类推,直至最后一 条记录。但 READP 则正好相反,游标是上移的,即读完第三条记录后,游标指向第二条记 录;读完第二条记录后,游标指向第一条记录,直至读完第一条记录。 一般来说,用 READ、READE 的概率会比 READP、READPE 的概率高得多,不过在 某些情况下,使用 READP 操作,又的确会很省事,这个一时间想不起例子来,大家可在编 程序时多实践。 READPE (N | E) (Read Prior Equal) 虽然我没用过,但猜想它应该就是指游标上移,按键值去读取文件。与 READP 的关系, 就类似于 READE 与 READ 的关系。 REALLOC (E) (Re-allocate Storage) 没用过 REL (E) (Release) 没用过 RESET (E) (Reset) 将数据结构赋值成为初始值。 注意是初始值,不是清空。 如定义结构: D FHSDS DS D FHS01 10 INZ(ABCD) D FHS02 5 INZ(EFGH) 那么,不管对该结构如何赋值,当执行语句: C RESET FHSDS 之后,FHS01 将会变成ABCD,FHS02 将会变成EFGH,即恢复成为初始值。 RETURN (H | M | R) (Return to Caller) RETURN 是程序结束。 在前面,“简单的程序流程”中,我们讲过,“SETON LR” 与 RETURN 这两句话一 起,做为程序的结束。这里,再详细解释一下两者之间的区别,以及关系: 如果不写 RETURN,只写“SETON LR”,程序执行完最后一句之后,将会再从第一 句开始执行,造成死循环。在简单的程序流程这个例子中,程序原来只想修改读到的第一条 记录,而如果没有 RETURN 的话,将会把所有的记录都修改掉,直到最后找不到可修改的 记录,然后系统报错,异常中断。(这种离奇的现象现在又测试不到了,可能是当时写错程 序了?把 F 写成了 P?不管它,当是我写错了,总之 RETURN 是表示程序结束,没有 RETURN,主程序无可执行的语句时,它也会结束;如果 RETURN 出现在主程序的中间, 那么 RETURN 后面的语句将不会执行) 如果只写 RETURN,不打开指示器*INLR,根据 blogliou 所说 “程序不会强制将内存 中的数据写到磁盘中。400 缺省的是BLOCK 输出,即数据记录满一个BLOCK 块时才会将 这一组记录写到磁盘上。那么如果这时BLOCK 没满,数据信息不会立刻写到磁盘上。之后 有其它作业用到该文件,读取的数据就不完整。” 但如果文件有唯一键字,或记录日志,必须同步写时,其实 BLOCK 实际被忽略,也就 是此时不会有错。目前我们用的是 MIMIX 备份,客户实际上将所有的文件都列入日志,这 时不写也不会出现上述错误。但为避免一些潜在的问题,养成良好的编程风格,建议将 SETON LR 与 RETURN 一同,做为程序结束的标志。当然,如果某个程序频繁被调用,且 不涉及文 操作时,可考虑不打开指示器*INLR,仅用 RETURN 作为结束,这样程序不 会被 PURGE 出内存,可提高调用效率。 如果没写 RETURN,也没有打开指示器*INLR,在编译时,系统将会报 40 级错,说找 不到程序结束的语句,所以大可放心。 ROLBK (E) (Roll Back) 1. 基本语法 Factory 1 Operation Factory 2 Result ROLBK 2. 该操作码无其它参数,就是指对事务处理进行回滚操作。 3. ILE 程序中,ROLBK 操作可随时进行,也允许在没有声明 COMMIT 类型的文件 的情况下,仍进行 ROLBK 操作(对该进程这前的事务进行确认处理)f 4. 关于日志的确认回滚操作,在后面会另设专门章节讲述。 2.8.4.5 S-Z SCAN (E) (Scan Character String) 扫描字符串 扫描字符或字符串 Factory 1 在目标字符串 Factory 2 中是否存在 Factory 1 Operation Factory 2 Result HI LO EQ FLD01 SCAN FLD02 N 26 FLD01 可以是字符,也可以是字符变量;可以是一位长,也可以是多位长。 当 FLD01 在 FLD02 中存在时,EQ 指示器打开,即*IN26=1,同时将 FLD02 中的起始 位置,赋值给 N; 当 FLD01 在 FLD02 中不存在时,EQ 指示器保持关闭状态,即*IN26=0,同时 N=0 允许从 FLD02 中的指定位置开始检查: FLD01 SCAN FLD02:2 N 26 如上句,即表示从 FLD02 的第 2 位,开始扫描。 在实际使用中,比如说我们判断某个字符是否为数字,就可以先定义一个 09 的常量, 然后将要判断的字符去 SCAN 一下这个常量 SELECT (Begin a Select Group) 分支语句 在操作码“OTHER”中讲过,为方便读者,列出简单语法如下: Factory 1 Operation Factory 2 Result HI LO EQ SELECT WHEN 条件判断 1 处理语句 1 WHEN 条件判断 2 处理语句 2 OTHER 处理语句 3 ENDSL 要注意,SELECT 操作码,必须有对应的 ENDSL 操作码,否则编译无法通过。 SETGT (E) (Set Greater Than) 定位操作大于 举个例子吧,假设文件中有一个字段,是标识顺序号的,1、2、3、4。即该字段为 1, 表示第一条记录,该字段为 2,表示第 2 条记录。那么: Factory 1 Operation Factory 2 Result HI LO EQ 2 SETGT 文件记录格式名 READ 文件记录格式名 这个 READ 操作,READ 到的,是第 3 条记录。也就是说,SETGT 操作码,会将游标 定位到大于键值的第一条记录前。 在实际使用中,如果我们是按逻辑文件读取,而且读了一条记录之后,对其键值相同的 记录都不需要再读取时,就可以用 SETGT,不过需要注意,Factory 1 项,需要是与键值相 同的变量,即如果文件是使用多个字段做为键值,那么我们也需要先定义一个组合键值的变 量,然后 Factory 1 处填写这个组合键值的变量名。 当声明文件的键值有多项时,Factory 1 项的键值,允许小于文件的键值,但顺序必须 一致。即声明的文件如果键值为:FHS01、FHS02、FHS03,那么我们在程序中定义三个类 型与之相同的变量 FLD01、FLD02、FLD03,以下写法都是有效的 FLDKEY KLIST KFLD FLD01 KFLD FLD02 KFLD FLD03 FLDKEY SETGT 文件记录格式名 FLDKEY KLIST KFLD FLD01 KFLD FLD02 FLDKEY SETGT 文件记录格式名 FLD01 SETLL 文件记录格式名 SETLL (E) (Set Lower Limit) 定位操作小于 语法与 SETGT 相同,含义与 SETGT 不同。SETLL 操作码,会将游标定位到与键值相 等的第一条记录之前,仍是上例,如果是 2 SETLL 文件记录格式名 READ 文件记录格式名 那么 READ 操作码读到的记录,就是第 2 条记录,看到了吧,和 SETGT 不同。 SETLL 操作码还可以用来简单判断当前键值是否存在有记录,以 PFFHSL3 为例(键值 为 FHS01、FHS02) Factory 1 Operation Factory 2 Result HI LO EQ FHSKEY KLIST KFLD FLD01 KFLD FLD02 EVAL FLD01=01 EVAL FLD02=02 FHSKEY SETLL 文件记录格式名 44 当文件中有相应记录时,EQ 指示器打开,即*IN44=1 当文件中无相应记录时,EQ 指示器关闭,即*IN44=0(与 CHAIN 正好相反,要注意) 而在这种用法中,SETLL 与 CHAIN 的区别在于,CHAIN 是定位读取了记录,而 SETLL 仅仅只是判断该记录是否存在。所以用 SETLL 操作,不能修改记录,也无法取出记录的值。 只能判断记录是否存在。如果要修改记录,或取出记录的值,还需要有一个读取定位的操作, 如 READ,或 READE、READP 等(最常用的,应该就是 READ 操作) SETOFF (Set Indicator Off) 关闭指示器 Factory 1 Operation Factory 2 Result HI LO EQ SETOFF 10 11 12 等价于 EVAL *IN10=0 EVAL *IN11=0 EVAL *IN12=0 在 SETOFF 这个操作码中,指示器填在 HI、LO、EQ 哪里都没关系,都是表示要被关 闭的指示器 SETON (Set Indicator On) 打开指示器 Factory 1 Operation Factory 2 Result HI LO EQ SETOFF 10 11 12 等价于 EVAL *IN10=1 EVAL *IN11=1 EVAL *IN12=1 在 SETON 这个操作码中,指示器填在 HI、LO、EQ 哪里都没关系,都是表示要被关闭 的指示器 SHTDN (Shut Down) 没用过 SORTA (Sort an Array) 没用过 SQRT (H) (Square Root) 开方 Factory 1 Operation Factory 2 Result HI LO EQ 9 SQRT 3 N 这时,N=3(因为 3 的平方为 9) 9、3 都可以是数字型变量,或者直接是数字 SUB (H) (Subtract) 减法操作 Factory 1 Operation Factory 2 Result HI LO EQ FLD01 SUB FLD02 FLD03 SUB FLD02 FLD03 看过前面的 ADD、MULT 操作码,这里不用解释也应该明白是什么意思了吧。那就不 多说了。 SUBDUR (E) (Subtract Duration) 日期相减 1. 减日期 Factory 1 Operation Factory 2 Result HI LO EQ FLD01 SUBDUR N:*Y FLD02 表示将日期型变量 FLD01 减去 N 年,赋值到日期型变量 FLD02 中; N 可以是一个数字型变量,也可以就是一个数字,N 允许为负数 *Y,*M,*D(还有其它的参数值,可见 ADDDUR,其中有详细解释) 2. 判断两个日期型变量之间的天/月/年数 Factory 1 Operation Factory 2 Result HI LO EQ FLD01 SUBDUR FLD02 N:*D 这时,N 做为一结果变量,表示日期型变量 FLD01 与 FLD02 之间的天数 SUBST (P | E) (Substring) 取字符/字符串 Factory 1 Operation Factory 2 Result HI LO EQ 2 SUBST FLD01:3 FLD02 表示从字段 FLD01 的第 3 位开始,取 2 位,左对齐赋值到字段 FLD02 中。 要求字段 FLD01 的长度必须大于或等于 3+2 位,否则程序会报错。 可以尝试用%SUBST 语句,也是等价的,如下 EVAL FLD02=%SUBST(FLD01:3:2) 表示的是同样的意思。 起始位数 3,取的长度 2,在两种写法之下,都可以使用数字型变量来表达。 相比较之下,%SUBST 还有一种用法,就是对字符的指定位置赋值,这个就厉害了: EVAL %SUBST(FLD02:3:2)=01 看到了吧,这句话就是说,使字段 FLD02 的第 3、4 位(即从第三位开始,两位长)等 于“01” TAG (Tag) 定义标签,与 GOTO 同用 Factory 1 Operation Factory 2 Result HI LO EQ FHSTAG TAG TEST (D | T | Z | E) (Test Date/Time/Timestamp) 没用过 TESTB (Test Bit) 没用过 TESTN (Test Numeric) 没用过 TESTZ (Test Zone) 没用过 TIME (Time of Day) -取当前系统时间 Factory 1 Operation Factory 2 Result HI LO EQ TIME FLD01 FLD01 可以是时间型或数字型变量 UNLOCK (E) (Unlock a Data Area or Release a Record) 解锁 Factory 1 Operation Factory 2 Result HI LO EQ UNLOCK 文件记录格式名 UNLOCK 是解锁操作,在某种程度上,可以将 UNLOCK 视为 ROLBK,将 UPDATE 视为 COMMIT。即如果锁定某条记录,并对其字段进行赋值之后,使用 UPDATE 语句,将 会把修改后的结果保存下来,即修改文件,而 UNLOCK 语句则不会修改文件,即否认了之 前对文件字段做的赋值修改。 从程序的执行效率上来讲,UNLOCK 的执行效率是高于 UPDATE 的,因为 UPDATE 操作时,系统需要对文件的每一个字段进行确认处理(DEBUG 时可以看到),而 UNLOCK 就 是简单的解锁而已。 UPDATE (Modify Existing Record) 修改记录 语法与 UNLOCK 一样。 这里需要说明一下,在执行 UPDATE 的时候,必须先使用 READ、CHAIN 等操作码锁 定一条记录。如果未锁住记录,UPDATE 操作码将会报错。当执行了 UNLOCK、UPDATE、 以及 ROLBK 语句时,等于是解锁,此时再执行 UPDATE 操作码之前,必须再次锁住记录 操作; WHEN (M | R) (When) 分支判断语句中的条件判断 在操作码“OTHER”,“SELECT”中都讲过,仍列出简单语法如下: Factory 1 Operation Factory 2 Result HI LO EQ SELECT WHEN 条件判断 1 处理语句 1 WHEN 条件判断 2 处理语句 2 OTHER 处理语句 3 ENDSL WHENxx (When True Then Select) 上面的语法,是 RPGLE 的语法,WHENxx 是 RPG 的语法,也就是 SELECT FLD01 WHENEQ FLD02 处理语句 1 . 这样的语法,在表达复杂的逻辑关系时,必须与 ANDxx,ORxx 一起使用,所以我不 使用 WHENxx 这个操作码。 WRITE (Create New Records) 写记录 常用的方式: Factory 1 Operation Factory 2 Result HI LO EQ CLEAR 文件记录格式名 EVAL 文件字段 1=xxxx EVAL 文件字段 2=xxxx WRITE 文件记录格式名 表示在文件中写入一条新记录。文件需要声明为可写的。 通常会在给文件字段赋值之前,作一次 CLEAR 操作来进行初始化,以避免不必要 的麻烦。 XFOOT (H) (Sum the Elements of an Array) 没用过,看帮助,是表示对数组字段的累加统计。 假设 DIMDATA 定义为一个数字型的数组变量,FHS01 为一个足够大的数字型变量 Factory 1 Operation Factory 2 Result HI LO EQ XFOOT DIMDATA FHS01 就表示将数组 DIMDATA 中的所有记录的值都取出来,汇总相加,赋值到数字变量 FHS01 中 XLATE (P | E) (Translate) 将一个字符串中指定的字符,更换成另外的字符。 举例:如 MYCHAR1, MYCHAR2 都是两个 20 位长的字符型变量 C MOVEL 'ABCAAAC123' MYCHAR1 C 'A':'9' XLATE MYCHAR1 MYCHAR2 执行过这个语句之后,MYCHAR2 就等于”9BC999C123,即将字符串 MYCHAR1 中所 有的“A”都变成了“9”; XLATE 也可能指定起始位置。如上句更改为: C 'A':'9' XLATE MYCHAR1:4 MYCHAR2 则 MYCHAR2 等于“ABC999C123”,指从第 4 位开始(含第 4 位),将“A”变成“9” 赋值。 Z-ADD (H) (Zero and Add) 向数字型变量赋值 Factory 1 Operation Factory 2 Result HI LO EQ Z-ADD FLD01 FLD02 将数字型变量 FLD01,赋值到数字型变量 FLD02 中。 Z-ADD、MOVE 虽然同是赋值操作码,但 Z-ADD 的用法就远没有 MOVE 那么变化多 端,只能在数字型变量之间赋值。所以也没有什么可说的了。zero 如果要对数字型变量赋初值,使用*ZERO Z-ADD *ZERO FLD02 Z-SUB (H) (Zero and Subtract) 用 0 减 Factory 1 Operation Factory 2 Result HI LO EQ Z-SUB FLD01 FLD02 等价于 0 SUB FLD01 FLD02 等价于 EVAL FLD02=FLD01*(-1) *ALL *ALL 是个很有意义的变量,举例: EVAL FLD01=*ALL0 表示将字符型变量 FLD01 赋值为全0 而 CLOSE *ALL 就表示关闭所有文件,意义与上面是不同的 LEN 取字符串的长度,举例: (MYLEN 为数字型变量,FLD01 为字符型变量) EVAL MYLEN = %LEN(FLD01) 这句话的意思,是指取字符串 FLD01 的长度,不过通常这样用是没意义的,因为直接 用%LEN 操作码,取到的是字符串的总长度,不是有效字符的长度,也就是说 FLD01 长度 为 2,那么 MYLEN 就恒等于 2,不会变。就算变量 FLD01 中没有值,取出的 MYLEN 也等 于 2.。 所以,%LEN 通常会与%TRIM 或是%TRIMR 一起使用,语法在下面介绍。 %TRIM,%TRIMR 都是去字符串变量中的空字符意思,%TRIM 是去字符串左边的空字符;%TRIMR 是去 字符串右边的空格。 通常我们在写程序中,都是默认字符串变量左对齐,所以我们使用%TRIMR 操作码的 概率应该高一点。举例: EVAL MYLEN = %LEN(%TRIMR(FLD01) 这时的 MYLEN,就是指变量 FLD01 中的有效长度(前提条件是 FLD01 中如果有值, 是左对齐)。如果 FLD01 为空,那么 MYFLEN 为 0;如果 FLD01 首位有值,第二位为空, 那么 MYLEN 为 1;如果 FLD01 两位都不为空,那么 MYLEN 就等于 2。 如果字符串左对齐,那么就使用%TRIMR 还有一种用法,假设字符串 FLD04 为 4 位长的字符,FLD01,FLD02 都是 2 位长的字 符,且 FLD01 等于“A ”,FLD02 等于“BC”,那我们执行: EVAL FLD04 = FLD01 + FLD01 + FLD02 FLD04 就等于“A A ”,也就是第二位与第四位都是空的,最后加的 FLD02 其实无 效。 而如果执行 EVAL FLD04 = %TRIMR(FLD01) + %TRIMR(FLD01) + FLD02 则 FLD04 就等于“AABC”,也就是说,在这里,%TRIMR(FLD01),是等价于单字符 “A”的 MONITOR 监控程序信息。据说是可以屏蔽掉出错信息,避免程序异常中断,未经测试。

    注意事项

    本文(RPG AS400程序员培训手册.doc)为本站会员(帮****)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开