RPG AS400程序员培训手册15419.docx

上传人:you****now 文档编号:68938325 上传时间:2022-12-30 格式:DOCX 页数:18 大小:51.20KB
返回 下载 相关 举报
RPG AS400程序员培训手册15419.docx_第1页
第1页 / 共18页
RPG AS400程序员培训手册15419.docx_第2页
第2页 / 共18页
点击查看更多>>
资源描述

《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

22、sult HI LLO EQQ2 SETTGT 文文件记录格式名名READ 文件记录格式名名这个REAAD 操作作,REAAD 到的的,是第33 条记录。也就就是说,SETGGT 操作作码,会将游游标定位到大于于键值的第一一条记录前。在实际使用用中,如果果我们是按逻辑文件读取,而且且读了一条记录录之后,对其键值相同的的记录都不需需要再读取时,就可以以用SETTGT,不不过需要注意意,Facctoryy 1 项项,需要是是与键值相同的变量,即即如果文件件是使用多多个字段做做为键值,那那么我们也需要先先定义一个组合键值的变量,然后FFactoory 11 处填写这个组合键值的变量名。当声明文件件的

23、键值有多项时,Facttory 1 项的键值,允许小于文件件的键值,但顺序必须一致。即声声明的文件件如果键值值为:FHS001、FHS002、FHS003,那么我们在程序中中定义三个类型与之相同同的变量FLD001、FLD002、FLD003,以下下写法都是是有效的FLDKEEY KLLISTKFLD FLD001KFLD FLD002KFLD FLD003FLDKEEY SEETGT 文件记录格式名名FLDKEEY KLLISTKFLD FLD001KFLD FLD002FLDKEEY SEETGT 文件记录格式名名FLD011 SETTLL 文文件记录格式名名SETLLL (EE) (Se

24、t Loweer Liimit) 定位操操作小于语法与SEETGT 相同,含含义与SETGGT 不同同。SETTLL 操操作码,会将游游标定位到与与键值相等的第一条条记录之前,仍仍是上例,如如果是2 SETTLL 文文件记录格式名名READ 文件记录格式名名那么REAAD 操作作码读到的记录,就是是第2 条记录,看到到了吧,和和SETGGT 不同同。SETLLL 操作码还可以用用来简单判断当当前键值是否存存在有记录录,以PFFFHSL33 为例(键值为FHS001、FHS002)Factoory 11 Opeeratiion FFactoory 22 Ressult HI LLO EQQFHS

25、KEEY KLLISTKFLD FLD001KFLD FLD002EVAL FLD001=001EVAL FLD002=002FHSKEEY SEETLL 文件记录格式名名44当文件中有有相应记录录时,EQ 指示示器打开,即*INN44=1当文件中无无相应记录录时,EQ 指示示器关闭,即*INN44=0(与与CHAIIN 正好好相反,要要注意)而在这种用用法中,SSETLLL 与CHAIIN 的区区别在于,CHHAIN 是定位读取了记录,而SETTLL仅仅只是判判断该记录录是否存在在。所以用用SETLLL 操作作,不能修修改记录,也无无法取出记记录的值。只能判断记记录是否存存在。如果果要修改记

26、记录,或取取出记录的值,还需要有一一个读取定位的的操作,如READD,或REAADE、READDP 等(最最常用的,应该就是READ 操作)SETOFFF (SSet IIndiccatorr Offf) 关闭闭指示器Factoory 11 Opeeratiion FFactoory 22 Ressult HI LLO EQQSETOFFF 100 11 12等价于EVAL *IN110=00EVAL *IN111=00EVAL *IN112=00在SETOOFF 这这个操作码中,指示示器填在HHI、LO、EQ 哪里里都没关系,都是是表示要被被关闭的指示器器SETONN (Seet Inndi

27、caator On) 打开指示器Factoory 11 Opeeratiion FFactoory 22 Ressult HI LLO EQQSETOFFF 100 11 12等价于EVAL *IN110=11EVAL *IN111=11EVAL *IN112=11在SETOON 这个操作码中,指示示器填在HHI、LO、EQ 哪里里都没关系,都是是表示要被被关闭的指示器SHTDNN (Shhut DDown)没用过SORTAA (Soort aan Arrray)没用过SQRT (H) (SSquarre Rooot) 开方Factoory 11 Opeeratiion FFactoory 2

28、2 Ressult HI LLO EQQ9 SQRRT 3 N这时,N=3(因为3 的平方方为9)9、3 都都可以是数数字型变量,或者者直接是数数字SUB (H) (Suubtraact) 减法操作作Factoory 11 Opeeratiion FFactoory 22 Ressult HI LLO EQQFLD011 SUBB FLDD02 FFLD033SUB FFLD022 FLDD03看过前面的的ADD、MULTT 操作码,这里不用解解释也应该明白是是什么意思了吧吧。那就不不多说了。SUBDUUR (E) (Subbtracct Duuratiion) 日期相减减1. 减日日期Fac

29、toory 11 Opeeratiion FFactoory 22 Ressult HI LLO EQQFLD011 SUBBDUR N:*Y FFLD022表示将日期期型变量FLD001 减去去N 年,赋值到日期期型变量FLD002 中;N 可以是是一个数字字型变量,也可可以就是一一个数字,N 允许为负数*Y,*MM,*D(还有其它的的参数值,可见ADDDDUR,其其中有详细细解释)2. 判断断两个日期期型变量之间的天/月/年数Factoory 11 Opeeratiion FFactoory 22 Ressult HI LLO EQQFLD011 SUBBDUR FLD002 N:*D这时

30、,N 做为一结果变量,表示示日期型变变量FLD001 与FLD002 之间的天数SUBSTT (PP | EE) (Subsstrinng) 取取字符/字符串Factoory 11 Opeeratiion FFactoory 22 Ressult HI LLO EQQ2 SUBBST FFLD011:3 FLLD02表示从字段段FLD001 的第第3 位开始,取2 位,左对齐齐赋值到字字段FLDD02 中中。要求字段FFLD011 的长度必须大于或等等于3+22 位,否否则程序会报错错。可以尝试用用%SUBBST 语语句,也是是等价的,如如下EVAL FLD002=%SSUBSTT(FLDD0

31、1:3:2)表示的是同同样的意思。起始位数33,取的长度2,在两种写法之下下,都可以以使用数字字型变量来表达达。相比较之下下,%SUUBST 还有一种用法,就就是对字符的指指定位置赋赋值,这个就厉害了:EVAL %SUBBST(FFLD022:3:2)=01看到了吧,这句话就是说,使字段FLD02 的第3、4 位(即从第三位开始,两位长)等于“01”TAG (Tag) 定义标签,与与GOTOO 同用Factoory 11 Opeeratiion FFactoory 22 Ressult HI LLO EQQFHSTAAG TAAGTEST (D | T | Z | E) (TTest Date

32、e/Timme/Tiimesttamp)没用过TESTBB (Teest BBit)没用过TESTNN (Teest NNumerric)没用过TESTZZ (Teest ZZone)没用过TIME (Timme off Dayy) -取当前系系统时间Factoory 11 Opeeratiion FFactoory 22 Ressult HI LLO EQQTIME FLD001FLD011 可以是是时间型或数数字型变量UNLOCCK (E) (Unllock a Daata AArea or RReleaase aa Reccord) 解锁Factoory 11 Opeeratiion F

33、Factoory 22 Ressult HI LLO EQQUNLOCCK 文件件记录格式名名UNLOCCK 是解解锁操作,在在某种程度上,可可以将UNNLOCKK 视为ROLLBK,将将UPDAATE视为COMMMIT。即即如果锁定某条记录录,并对其字段进行赋值之后,使使用UPDDATE 语句,将会把修改后后的结果保存下下来,即修修改文件,而而UNLOOCK 语语句则不会修改改文件,即即否认了之前对文件字字段做的赋赋值修改。从程序的执执行效率上上来讲,UNLOOCK 的的执行效率是是高于UPPDATEE 的,因因为UPDAATE操作时,系系统需要对文件的每一个字段段进行确认处理(DEBBUG

34、 时时可以看到到),而UNLLOCK 就是简单的解解锁而已。UPDATTE (MModiffy Exxistiing RRecorrd) 修修改记录语法与UNNLOCKK 一样。这里需要说说明一下,在在执行UPDAATE 的的时候,必须先使用REEAD、CHAIIN 等操操作码锁定一条记录录。如果未未锁住记录,UPDAATE 操操作码将会报错。当执行了UNLLOCK、UPDAATE、以及ROLLBK 语语句时,等于是是解锁,此时再执行UPDAATE 操操作码之前,必必须再次锁住记录操作;WHEN (M | R) (WWhen) 分支判判断语句中的条条件判断在操作码“OTHEER”,“SEELE

35、CTT”中都讲过过,仍列出出简单语法如如下:Factoory 11 Opeeratiion FFactoory 22 Ressult HI LLO EQQSELECCTWHEN 条件判断断1处理语句11WHEN 条件判断断2处理语句22OTHERR处理语句33ENDSLLWHENxxx (WWhen Truee Theen Seelectt)上面的语法法,是RPPGLE 的语法,WHEENxx 是RPG 的语法,也就就是SELECCTFLD011 WHEENEQ FLD002处理语句11.这样的语法法,在表达达复杂的逻辑关系时,必须与ANDxxx,ORxxx 一起使使用,所以以我不使用WHEE

36、Nxx 这个操作码。WRITEE (Crreatee Neww Reccordss) 写记录常用的方式式:Factoory 11 Opeeratiion FFactoory 22 Ressult HI LLO EQQCLEARR 文件记录格式名名EVAL 文件字段段1=xxxxxEVAL 文件字段段2=xxxxxWRITEE 文件记录格式名名表示在文件件中写入一一条新记录录。文件需需要声明为为可写的。通常会在给给文件字段段赋值之前,作作一次CLLEAR 操作来进行初始化化,以避免免不必要的麻烦。XFOOTT (HH) (Sum the Elemmentss of an AArrayy)没用过,

37、看看帮助,是是表示对数组字段的累累加统计。假设DIMMDATAA 定义为一个数数字型的数数组变量,FHSS01 为为一个足够大的数字字型变量Factoory 11 Opeeratiion FFactoory 22 Ressult HI LLO EQQXFOOTT DIMMDATAA FHSS01就表示将数数组DIMDDATA 中的所有有记录的值都取出来来,汇总相加,赋值值到数字变量FHS011 中XLATEE (PP | EE) (Trannslatte)将一个字符符串中指定定的字符,更更换成另外的的字符。举例:如MMYCHAAR1, MYCHHAR2 都是两个个20 位长的字符型型变量C M

38、OVVEL ABCAAAAC1123 MYCHHAR1C A:9 XLAATE MMYCHAAR1 MMYCHAAR2执行过这个个语句之后,MMYCHAAR2 就就等于”99BC9999C1223,即即将字符串串MYCHHAR1 中所有的“A”都都变成了“9”;XLATEE 也可能能指定起始始位置。如如上句更改改为:C A:9 XLAATE MMYCHAAR1:4 MYYCHARR2则MYCHHAR2 等于“ABBC9999C1233”,指从从第4 位开始(含第第4 位),将将“A”变成“9”赋值。Z-ADDD (HH) (Zeroo andd Addd) 向数数字型变量赋值Factoory

39、11 Opeeratiion FFactoory 22 Ressult HI LLO EQQZ-ADDD FLDD01 FFLD022将数字型变变量FLD001,赋值到数字字型变量FLD002 中。Z-ADDD、MOVEE 虽然同是赋值值操作码,但Z-AADD 的的用法就远远没有MOVVE 那么变化多端,只能在在数字型变变量之间赋值值。所以也也没有什么么可说的了。zeero如果要对数数字型变量赋初值,使用*ZZEROZ-ADDD *ZEERO FFLD022Z-SUBB (HH) (Zeroo andd Subbtracct) 用用0 减Factoory 11 Opeeratiion FFac

40、toory 22 Ressult HI LLO EQQZ-SUBB FLDD01 FFLD022等价于0 SUBB FLDD01 FFLD022等价于EVAL FLD002=FLLD01*(-1)*ALL*ALL 是个很有有意义的变量,举例:EVAL FLD001=*AALL0表示将字符符型变量FLD001 赋值值为全0而CLOSEE *ALLL就表示关闭闭所有文件件,意义与上面是是不同的LEN取字符串的的长度,举例:(MYLEEN 为数字型变量,FLDD01 为为字符型变量)EVAL MYLEEN = %LENN(FLDD01)这句话的意意思,是指指取字符串串FLD001 的长度,不过通常这

41、样用是没没意义的,因为直接用%LENN 操作码,取到的的是字符串串的总长度,不不是有效字字符的长度,也就就是说FLD001 长度为2,那么么MYLEEN 就恒恒等于2,不会变。就算变量FLD001 中没没有值,取出的的MYLEEN 也等等于2.。所以,%LLEN 通通常会与%TRIMM 或是%TRRIMR 一起使用用,语法在下面面介绍。%TRIMM,%TRIIMR都是去字符符串变量中的空空字符意思思,%TRRIM 是是去字符串串左边的空字符符;%TRRIMR 是去字符串右边边的空格。通常我们在在写程序中中,都是默默认字符串变量左对齐,所以以我们使用%TRRIMR 操作码的概率应该高高一点。举举

42、例:EVAL MYLEEN = %LENN(%TRRIMR(FLD001)这时的MYYLEN,就就是指变量FLD001 中的的有效长度(前提提条件是FFLD011 中如果果有值,是左对齐)。如如果FLDD01 为为空,那么MYFLLEN 为为0;如果FLLD01 首位有值,第二位位为空,那么MYLLEN 为为1;如果FLLD01 两位都不不为空,那么MYLEEN 就等等于2。如果字符串串左对齐,那么就使用%TTRIMRR还有一种用用法,假设设字符串FLLD04 为4 位长的字符,FFLD011,FLD002 都是是2 位长的字符,且FLLD01 等于“A ”,FLDD02 等等于“BCC”,那我我们执行:EVAL FLD004 = FLD001 + FLD001 + FLD002FLD044 就等于于“A AA ”,也也就是第二二位与第四四位都是空空的,最后后加的FLLD02 其实无效。而如果执行行EVAL FLD004 = %TRIIMR(FFLD011) + %TRIIMR(FFLD011) + FLD002则FLD004 就等等于“AAABC”,也也就是说,在这里,%TRRIMR(FLD001),是是等价于单单字符“A”的MONITTOR监控程序信信息。据说说是可以屏屏蔽掉出错错信息,避避免程序异异常中断,未未经测试。

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

当前位置:首页 > 管理文献 > 管理工具

本站为文档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