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

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

《RPG AS400程序员培训手册7099.docx》由会员分享,可在线阅读,更多相关《RPG AS400程序员培训手册7099.docx(28页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、2.8.4.4 O-R ON-ERROR (On-Error)没用过OPEN (EE) (Oppen Fille ffor Proocesssinng) 打开文件Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQOPEN 文件名名OPEN 后面的的目标,必须是在当当前程序序中已声声明的文文件名(不不是文件件的记录录格式名名),而且在OPPEN 操作之之后,在在程序结结束之前前之前,必必须有对应的CLOOSE 操作。使用OPEEN 操操作,文文件在声声明时,必须使用USSROPPN 关关键字(详见见D 行说明)。ORxx (Orr)

2、 逻逻辑判断断或Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQFLD011 IFFGT FLDD03FLD011 ORREQ FLDD02等价于IF FLLD011FLLD033 ORR FLLD011=FLLD022与IF、IIFxxx,ANDD、ANDDxx 类似,RPPGLEE 的写写法ORR,比RPPG 的的写法OORxxx 要灵灵活,而且可以用用来表达达一些复复杂的逻辑关关系。有有鉴于此,所所以通常常IF 语句中,我我会以OOR 为为主,基本不用OORxxx。如果果在编程序方方面,公公司/项目组无硬性性要求,那那我觉

3、得还是少用用ORxxx 吧吧,总觉得这种种写法的的逻辑关关系看起起来不直直接,尤尤其是有有很复杂杂的ANDD,ORR 时。OTHERR (OOtheerwiise Sellectt) 分分支语句的判判断与分支语句句SELLECTT 一起起使用,表表示不符符合上述述所有条条件时的操作作,如下下:Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQSELECCTWHEN 条件判判断1处理语句11WHEN 条件判判断2处理语句22OTHERR处理语句33ENDSLL在这个例子子中,当当满足条件件判断11 时,运行行处理语句1,运行行结束后

4、跳跳至ENNDSLL 处;如果不满足足条件判判断1,则程序继续续向下执行,判判断是否否满足条件件判断22。当满足条件件判断22 时,运行行处理语句2,跳至至ENDDSL;当不满满足当不满足条条件判断断2 时,程序序继续向下下执下,当当读到OTHHER 操作码时时,无条条件运行处理语句句3(即当当程序当当前不满满足以上上所以条条件判断断时,则执行OTHHER 之后的的语句。处理语句允允许有很多多句;条件判断可可以写得得很复杂杂,也允允许对不同同的字段段进行判断断;比如如说C 语言也有有分支语语句swittch,但但是这个语句只能能对一个字字段进行分支支判断,ILE 语言与它不同,允许对不同的字段

5、进行判判断就我目前掌掌握的测测试情况况,上述述的SEELECCTWWHENN-OOTHEEREENDSSL,其其实也可以以写做:IF 条件件判断11处理语句11ELSEIIF 条条件判断断2处理语句22ELSE处理语句33ENDIFF即WHENN 与ELSSEIFF 是类似的,这这样说,应该可以以明白了了吧。总之,SEELECCTEENDSSL 是是一个很很好用的的语法,尤尤其是在在表示很很多不同同的分支支处理时。OUT (E) (Wriite a DDataa Arrea)没用过,讲讲数据域域的。PARM (Iddenttifyy Paarammeteers) 定义入口参参数Factoory

6、 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQR*ENTRRY PPLISSTPARM FLDD01关于具体内内容讲解,详见见前面所所说“入口口参数”一一章。允许做为入入口参数数的有:普通变变量、结构变量、数数组变量关于PARRM、PLIIST,还有一种在Facctorry 11, Faactoory 2 也也填写变变量或指指示器的的用法,不过我我不知道道它具体体表示什什么意思,也也不知道道该怎么用。请用过的来补充。PLISTT (IIdenntiffy aa Paarammeteer LListt) 同同上POST (EE) (Poost)

7、没用过READ (NN | E) (RReadd a Reccordd) 读读取记录1. 基本本语法:Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQREAD 文件记录录格式名名45 46READ后后面跟的的,必须须是声明明的文件件记录格式式名;LO 指示示器表示示锁表指示示器,当当在指定定的时间(CHGGPF,WAIITRCCD 项项可看到到),需要读取的的记录仍被被锁,将会会打开LO 指示器器,即*IN445=1;EQ指示器器为是否读到指示示器。当当未读到任何何记录时时,打开EQ 指示器器,即*IN446=12. 当文文件在

8、程程序中,是是用只读读的方式式声明时时,REAAD 操操作并不不会造成成锁表;如果文件在在程序中中是用修修改的方方式声明明,REEAD 操作成成功后,该记录被锁;直到执行解锁操作作(UNNLOCCK,或或UPDDATEE),或或REAAD 该该文件的的其它记记录,才才会解锁锁如果文件是是用修改改的方式式声明,但但希望RREADD 操作作不锁表时,那么就用REEAD(N),即Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQREAD(N) 文件记录录格式名名45 46这样读文件件,就不不会锁记记录,但但是同时时也不能能修改记记录。如

9、如果需要要修改记记录,那那么在修改之前前(包括括对文件字字段赋值值之前),还必须再对该记录进行一次定位操作(比如CHAINN、REAAD 语语句均可可)。也也就是说说,如果果要修改改记录,必必须先锁住当前前记录(很很合理吧)3. 当执执行REAAD 操操作时,程序序是根据据游标当前在在文件中中所指向向的位置置,顺序读取下一条记录。关于游标是如何何指向,还不是一个很简单的问题,所以将会在下一章“数据库相关知知识”中具具体讲解。4. 执行行REAAD 操操作时,允许声明的的文件没没有键值值。(即即PF 文件)READCC (E) (RReadd Neext Chaangeed RRecoord)没

10、用过,读读下一次次修改过过的记录?READEE (N | E) (Reaad EEquaal KKey) 读取键值相等等的记录录语法与REEAD 操作码大致一一样,这里不再再重复,只说不同的的:假设程序中中已声明明逻辑文件件PFFFHSLL3(键值为为FHSS01+FHSS02)Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQFHSKEEY KKLISSTKFLD FLDD01KFLD FLDD02FHSKEEY SSETLLL FFMTFFHSDOW 11=1FHSKEEY RREADDE FFMTFFHS 15IF *IIN

11、155=11LEAVEEENDIFFENDDOO这段话的意意思,就就是定义义组合键值FHHSKEEY,然然后根据据这个FHSSKEYY 在逻辑文件件PFFHSSL3 中去定定位,循循环读取PFFFHSLL3 中中,FHHS011、FHSS03 与FLDD01、FLDD02相相等的记记录。当读取取记录结结束,或或键值不等等时,退出出循环(*INN15 是EQ 指示器器)。如如果将RREADDE 操操作码换成RREADD 操作作码的话(当然然,Faactoory 1 处处也就不不能有值值),就就没有“键值不等等时退出循环”这一一层意思,只只是读不到记录录时就退退出循环环,但有有时我们使用逻辑辑文件

12、,仅仅仅是需需要它的排序,而而不需要要读不到键值值相等的的记录就退退出循环环。所以以说,使用用REAAD 操操作码,还是READDE 操操作码,需要要根据实实际的要要求来决决定。以上的Faactoory 1 处处填写值的系统处处理,当当REAADE 操作码在Facctorry 11 处未填写写值时,系统实际上上是将当当前的值值与读到的上上一条记记录的关键字进行比较,而不不是与SSETLLL 时时的键值做比较(读第一条条记录不做做比较!),如如果键值值不等时,置EQQ 指示示器为1。也也就是说说,如果没有与与FHSSKEYY 键值值相同的的录,那么系统并不是是直接找找开EQ 指示器器,而是是会一

13、直直保持正常地往往下读,直到到找到与与读到的第第一条记记录关键键字不同同的记录录,才会会打开EQ 指示器器,所以要注意意。READPP (N | E) (Reaad PPrioor RRecoord) 读取记录游标上移简单来说,REAAD、READDE 操操作时,游标在数据据文件中中,是下下移的;即读完第一一条记录,游标指指向第二二条记录录;读完第二二条记录录,游标指向第第三条记记录,依依此类推,直直至最后后一条记录。但但REAADP 则正好相相反,游游标是上移移的,即即读完第三三条记录录后,游游标指向第第二条记记录;读完第第二条记记录后,游游标指向第第一条记记录,直直至读完第一一条记录录。一

14、般来说,用用REAAD、REAADE 的概率率会比RREADDP、REAADPEE 的概概率高得得多,不不过在某些情况下下,使用用REAADP 操作,又又的确会会很省事事,这个一时间间想不起起例子来来,大家家可在编编程序时多实实践。READPPE (N | EE) (Reead Priior Equual)虽然我没用用过,但猜猜想它应应该就是是指游标标上移,按按键值去读取文件件。与RREADDP 的的关系,就类似于RREADDE 与与REAAD 的的关系。REALLLOC (EE) (Ree-allloccatee Sttoraage)没用过REL (E) (Relleasse)没用过RESE

15、TT (E) (RReseet)将数据结构构赋值成为初始值。注意是初始始值,不是是清空。如定义结构构:D FHSSDS DSD FHSS01 10 INZZ(ABBCD)D FHSS02 5 IINZ(EFFGH)那么,不管管对该结结构如何何赋值,当当执行语句:C RESSET FHSSDS之后,FHHS011 将会会变成ABBCD,FHSS02 将会变成EFFGH,即恢恢复成为初始值。RETURRN (H | MM | R) (RRetuurn to Calllerr)RETURRN 是是程序结结束。在前面,“简单的程序流程”中,我们讲过,“SETON LR” 与RETURN 这两句话一起,

16、做为程程序的结结束。这里,再再详细解释一下两两者之间间的区别,以及及关系:如果不写RRETUURN,只写写“SEETONN LRR”,程程序执行完最最后一句句之后,将将会再从从第一句开始执行行,造成成死循环环。在简单单的程序序流程这这个例子子中,程程序原来来只想修修改读到的第第一条记录,而如如果没有有RETTURNN 的话,将会会把所有有的记录录都修改改掉,直直到最后后找不到到可修改改的记录,然后后系统报报错,异异常中断断。(这这种离奇奇的现象现在又测试试不到了了,可能能是当时时写错程序了?把FF 写成成了P?不管管它,当当是我写写错了,总之RETTURNN 是表表示程序序结束,没没有RETU

17、RRN,主主程序无无可执行的语句时,它也也会结束;如如果REETURRN 出出现在主程程序的中中间,那么RETTURNN 后面面的语句将不不会执行)如果只写RRETUURN,不不打开指示器器*INNLR,根根据blloglliouu 所说 “程序序不会强强制将内内存中的数据写写到磁盘盘中。4000 缺缺省的是是BLOOCK 输出,即即数据记记录满一一个BLLOCKK 块时时才会将将这一组记录录写到磁磁盘上。那那么如果这时时BLOOCK 没满,数据据信息不不会立刻刻写到磁磁盘上。之之后有其它作业业用到该文件,读读取的数数据就不不完整。”但如果文件件有唯一一键字,或或记录日志志,必须须同步写时,其

18、实BLOOCK 实际被忽忽略,也也就是此时不会会有错。目前前我们用的是是MIMMIX 备份,客客户实际际上将所所有的文文件都列列入日志志,这时不写也不不会出现现上述错误误。但为避免一一些潜在在的问题题,养成良好好的编程风格,建建议将SETONN LRR 与RETTURNN 一同同,做为为程序结束的标志。当当然,如如果某个个程序频频繁被调用,且且不涉及文 操作时时,可考考虑不打开指示器器*INNLR,仅用RETTURNN 作为结束,这样样程序不不会被PURRGE 出内存存,可提提高调用效率率。如果没写RRETUURN,也也没有打打开指示器器*INNLR,在在编译时时,系统将会报40 级错,说找不

19、到程序结结束的语句,所所以大可可放心。ROLBKK (E) (RRolll Baack)1. 基本本语法Factoory 1 OOperratiion Facctorry 22 ReesulltROLBKK2. 该操操作码无其它它参数,就就是指对对事务处理进行回滚操作。3. ILLE 程程序中,ROLBK 操作可随时进行,也允许在没有声明COMMIT 类型的文件的情况下,仍仍进行ROLLBK 操作(对对该进程程这前的事事务进行确确认处理)f4. 关于于日志的的确认回滚操作,在在后面会会另设专专门章节讲述。2.8.44.5 S-Z SCAN (EE) (Sccan Chaaraccterr St

20、trinng) 扫描字符符串扫描字符或或字符串串Facctorry 11 在目目标字符串串Facctorry 22 中是是否存在在Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQFLD011 SCCAN FLDD02 N 226FLD011 可以以是字符符,也可可以是字字符变量;可可以是一一位长,也可可以是多多位长。当FLD001 在在FLDD02 中存在在时,EQ 指示器器打开,即*IIN266=11,同同时将FLDD02 中的起起始位置,赋值值给N;当FLD001 在在FLDD02 中不存存在时,EQ 指示器器保持关关闭状态

21、,即*IIN266=00,同同时N=00允许从FLLD022 中的的指定位位置开始检查:FLD011 SCCAN FLDD02:2 NN 266如上句,即即表示从从FLDD02 的第2 位,开始扫描。在实际使用用中,比比如说我们判断某某个字符符是否为为数字,就就可以先先定义一个09 的的常量,然后将要判判断的字字符去SSCANN 一下下这个常量量SELECCT (Beggin a SSeleect Grooup) 分支支语句在操作码“OTHHER”中中讲过,为方便读者,列列出简单单语法如如下:Factoory 1 OOperratiion Facctorry 22 Reesullt HHI L

22、LO EEQSELECCTWHEN 条件判判断1处理语句11WHEN 条件判判断2处理语句22OTHERR处理语句33ENDSLL要注意,SSELEECT 操作码,必须有对应的ENDDSL 操作码,否则编编译无法法通过。SETGTT (E) (SSet Greeateer TThann) 定定位操作作大于举个例子吧吧,假设设文件中中有一个个字段,是是标识顺顺序号的的,1、2、3、4。即该字段为1,表示第一条条记录,该字段为2,表示示第2 条记录。那那么:Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQ2 SETTGT 文件记录录

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

24、 11 项的键值,允允许小于文文件的键键值,但但顺序必须一致。即声声明的文文件如果果键值为为:FHSS01、FHSS02、FHSS03,那那么我们在程序序中定义义三个类型与之相同同的变量FLDD01、FLDD02、FLDD03,以以下写法法都是有有效的FLDKEEY KKLISSTKFLD FLDD01KFLD FLDD02KFLD FLDD03FLDKEEY SSETGGT 文文件记录录格式名名FLDKEEY KKLISSTKFLD FLDD01KFLD FLDD02FLDKEEY SSETGGT 文文件记录录格式名名FLD011 SEETLLL 文件件记录格式式名SETLLL (E) (S

25、Set Lowwer Limmit) 定位位操作小于语法与SEETGTT 相同同,含义义与SETTGT 不同。SSETLLL 操操作码,会将将游标定位到到与键值值相等的第一条条记录之前前,仍是是上例,如如果是2 SETTLL 文件记录录格式名名READ 文件记录录格式名名那么REAAD 操操作码读读到的记录录,就是是第2 条记录,看看到了吧吧,和SSETGGT 不不同。SETLLL 操作作码还可以以用来简简单判断断当前键键值是否否存在有有记录,以以PFFFHSLL3 为为例(键值值为FHS001、FHSS02)Factoory 1 OOperratiion Facctorry 22 Reesu

26、llt HHI LLO EEQFHSKEEY KKLISSTKFLD FLDD01KFLD FLDD02EVAL FLDD01=011EVAL FLDD02=022FHSKEEY SSETLLL 文文件记录录格式名名44当文件中有有相应记记录时,EQ 指示器器打开,即*IIN444=11当文件中无无相应记记录时,EQ 指示器器关闭,即即*INN44=0(与CHHAINN 正好好相反,要要注意)而在这种用用法中,SETLL 与CHAIN 的区别在于,CHAIN 是定位读取了记录,而SETLL仅仅只是判判断该记记录是否否存在。所所以用SSETLLL 操操作,不不能修改改记录,也也无法取取出记录录的

27、值。只能判断记记录是否否存在。如如果要修修改记录录,或取取出记录录的值,还需要有有一个读读取定位位的操作作,如READD,或REEADEE、REAADP 等(最最常用的的,应该该就是REEAD 操作)SETOFFF (Sett Inndiccatoor OOff) 关闭闭指示器器Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQSETOFFF 110 111 112等价于EVAL *INN10=0EVAL *INN11=0EVAL *INN12=0在SETOOFF 这个操作作码中,指指示器填填在HII、LO、EQ 哪里都都没关系,

28、都都是表示示要被关关闭的指示器器SETONN (SSet Inddicaatorr Onn) 打打开指示器器Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQSETOFFF 110 111 112等价于EVAL *INN10=1EVAL *INN11=1EVAL *INN12=1在SETOON 这这个操作作码中,指指示器填填在HII、LO、EQ 哪里都都没关系,都都是表示示要被关关闭的指示器SHTDNN (SShutt Doown)没用过SORTAA (SSortt ann Arrrayy)没用过SQRT (HH) (Sqquar

29、re RRoott) 开开方Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQ9 SQRRT 33 N这时,N=3(因因为3 的平平方为9)9、3 都都可以是是数字型型变量,或或者直接接是数字字SUB (H) (Subbtraact) 减法法操作Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQFLD011 SUUB FFLD002 FFLD003SUB FFLD002 FFLD003看过前面的的ADDD、MULLT 操操作码,这里不用用解释也应该明白白是什么么意思了

30、了吧。那那就不多说了。SUBDUUR (E) (Subbtraact Durratiion) 日期期相减1. 减日日期Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQFLD011 SUUBDUUR NN:*Y FLDD02表示将日期期型变量FLDD01 减去N 年,赋值值到日期期型变量FLDD02 中;N 可以是是一个数数字型变变量,也也可以就就是一个个数字,N 允许为负数*Y,*MM,*D(还有其它它的参数数值,可见ADDDDURR,其中中有详细细解释)2. 判断断两个日日期型变变量之间的天/月/年数Factoory 1 OO

31、perratiion Facctorry 22 Reesullt HHI LLO EEQFLD011 SUUBDUUR FFLD002 NN:*D这时,N 做为一结果变量,表表示日期期型变量FLDD01 与FLDD02 之间的天数数SUBSTT (P | E) (Subbstrringg) 取取字符/字符串串Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQ2 SUBBST FLDD01:3 FFLD002表示从字段段FLDD01 的第3 位开始,取取2 位,左左对齐赋赋值到字字段FLLD022 中。要求字段FFLD001 的的长

32、度必须大于或或等于33+2 位,否否则程序会会报错。可以尝试用用%SUUBSTT 语句,也也是等价价的,如如下EVAL FLDD02=%SUUBSTT(FLLD011:3:2)表示的是同同样的意思思。起始位数33,取的的长度2,在两两种写法之之下,都都可以使使用数字字型变量来表表达。相比较之下下,%SSUBSST 还还有一种用法,就就是对字符的的指定位位置赋值值,这个就厉害了:EVAL %SUUBSTT(FLLD022:3:2)=011看到了吧,这句话就是说,使字段FLD02 的第3、4 位(即从第三位开始,两位长)等于“01”TAG (Tagg) 定定义标签签,与GOOTO 同用Factoo

33、ry 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQFHSTAAG TTAGTEST (DD | T | Z | EE) (Teest Datte/TTimee/Tiimesstammp)没用过TESTBB (TTestt Biit)没用过TESTNN (TTestt Nuumerric)没用过TESTZZ (TTestt Zoone)没用过TIME (Tiime of Dayy) -取当当前系统统时间Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQTIME FLDD01FLD0

34、11 可以以是时间间型或数数字型变变量UNLOCCK (E) (Unllockk a Datta AAreaa orr Reeleaase a RRecoord) 解锁Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQUNLOCCK 文文件记录录格式名名UNLOCCK 是是解锁操作,在在某种程度上上,可以以将UNNLOCCK 视视为ROOLBKK,将UPPDATTE视为COMMMITT。即如如果锁定某条条记录,并并对其字段段进行赋值之后后,使用用UPDDATEE 语句,将将会把修改后后的结果保存存下来,即即修改文文件,而而UNLL

35、OCKK 语句则不会修修改文件件,即否否认了之前对文件字字段做的的赋值修改改。从程序的执执行效率率上来讲讲,UNLLOCKK 的执行效率率是高于于UPDDATEE 的,因因为UPDDATEE操作时,系系统需要对文件的的每一个字字段进行确认处处理(DEEBUGG 时可以看看到),而UNNLOCCK 就就是简单的解解锁而已。UPDATTE (Moddifyy Exxisttingg Reecorrd) 修改记录录语法与UNNLOCCK 一一样。这里需要说说明一下下,在执执行UPDDATEE 的时候,必必须先使用用REAAD、CHAAIN 等操作作码锁定一条记录录。如果果未锁住记录,UPDDATEE

36、 操作作码将会报错错。当执行了UNNLOCCK、UPDDATEE、以及ROLLBK 语句时,等于于是解锁锁,此时再执行UPDDATEE 操作作码之前,必必须再次锁住记录操作;WHEN (MM | R) (WWhenn) 分分支判断断语句中的的条件判判断在操作码“OTHHER”,“SSELEECT”中中都讲过过,仍列列出简单单语法如如下:Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQSELECCTWHEN 条件判判断1处理语句11WHEN 条件判判断2处理语句22OTHERR处理语句33ENDSLLWHENxxx (Wheen

37、TTruee Thhen Sellectt)上面的语法法,是RRPGLLE 的的语法,WHHENxxx 是是RPGG 的语法,也也就是SELECCTFLD011 WHHENEEQ FFLD002处理语句11.这样的语法法,在表表达复杂杂的逻辑关关系时,必须与ANDDxx,ORxxx 一一起使用用,所以以我不使用WHEENxxx 这个操作作码。WRITEE (CCreaate Neww Reecorrds) 写记录常用的方式式:Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQCLEARR 文件件记录格式式名EVAL 文件字字段1=

38、xxxxxEVAL 文件字字段2=xxxxxWRITEE 文件件记录格式式名表示在文件件中写入入一条新新记录。文文件需要要声明为为可写的的。通常会在给给文件字字段赋值值之前,作作一次CCLEAAR 操操作来进进行初始始化,以以避免不不必要的麻烦。XFOOTT (H) (SSum thee Ellemeentss off ann Arrrayy)没用过,看看帮助,是是表示对对数组字段的的累加统统计。假设DIMMDATTA 定定义为一个个数字型型的数组组变量,FHHS011 为一个足足够大的数数字型变变量Factoory 1 OOperratiion Facctorry 22 Reesullt H

39、HI LLO EEQXFOOTT DIIMDAATA FHSS01就表示将数数组DIMMDATTA 中中的所有有记录的值都取出出来,汇汇总相加加,赋值值到数字字变量FHS011 中XLATEE (P | E) (Traansllatee)将一个字符符串中指指定的字字符,更更换成另外外的字符符。举例:如MMYCHHAR11, MYYCHAAR2 都是两两个200 位长的字符符型变量C MOVVEL ABBCAAAAC1123 MYYCHAAR1C A:99 XXLATTE MMYCHHAR11 MYYCHAAR2执行过这个个语句之后后,MYYCHAAR2 就等于于”9BBC9999C1123,即

40、将将字符串串MYCCHARR1 中中所有的“A”都都变成了“9”;XLATEE 也可可能指定定起始位位置。如如上句更更改为:C A:99 XXLATTE MMYCHHAR11:4 MMYCHHAR22则MYCHHAR22 等于于“ABBC9999C1123”,指指从第44 位开始(含含第4 位),将将“A”变成“9”赋值。Z-ADDD (H) (ZZeroo annd AAdd) 向数数字型变变量赋值Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQZ-ADDD FLLD011 FLLD022将数字型变变量FLDD01,赋值到数数

41、字型变变量FLDD02 中。Z-ADDD、MOVVE 虽虽然同是是赋值操作作码,但Z-ADDD 的用用法就远远没有MOOVE 那么变化多多端,只能在在数字型型变量之间赋赋值。所所以也没没有什么么可说的了。zzeroo如果要对数数字型变变量赋初值,使用用*ZEEROZ-ADDD *ZZEROO FLLD022Z-SUBB (H) (ZZeroo annd SSubttracct) 用0 减Factoory 1 OOperratiion Facctorry 22 Reesullt HHI LLO EEQZ-SUBB FLLD011 FLLD022等价于0 SUBB FLLD011 FLLD022等

42、价于EVAL FLDD02=FLDD01*(-11)*ALL*ALL 是个很很有意义义的变量,举例:EVAL FLDD01=*ALLL0表示将字符符型变量FLDD01 赋值为为全0而CLOSEE *AALL就表示关闭闭所有文文件,意意义与上面面是不同同的LEN取字符串的的长度,举例:(MYLEEN 为为数字型型变量,FLLD011 为字符型型变量)EVAL MYLLEN = %LENN(FLLD011)这句话的意意思,是是指取字字符串FFLD001 的的长度,不不过通常这样样用是没没意义的,因因为直接用%LENN 操作作码,取到到的是字字符串的的总长度,不不是有效效字符的的长度,也也就是说说F

43、LDD01 长度为2,那么么MYLLEN 就恒等等于2,不会会变。就算算变量FLDD01 中没有有值,取出出的MYYLENN 也等等于2.。所以,%LLEN 通常会会与%TTRIMM 或是是%TRRIMRR 一起起使用,语法在下面介绍。%TRIMM,%TRRIMRR都是去字符符串变量中的的空字符符意思,%TRIM 是去字符串左边的空字符;%TRIMR 是去字符串右边边的空格格。通常我们在在写程序序中,都都是默认认字符串串变量左对齐齐,所以以我们使用%TTRIMMR 操操作码的概率应该高高一点。举例:EVAL MYLLEN = %LENN(%TTRIMMR(FFLD001)这时的MYYLENN,

44、就是是指变量FLDD01 中的有有效长度(前前提条件件是FLLD011 中如如果有值值,是左对齐)。如如果FLLD011 为空,那那么MYFFLENN 为0;如果果FLDD01 首位有有值,第二二位为空,那么MYLLEN 为1;如果果FLDD01 两位都都不为空,那那么MYLLEN 就等于于2。如果字符串串左对齐齐,那么就使用用%TRRIMRR还有一种用用法,假假设字符串串FLDD04 为4 位长的字符符,FLLD011,FLDD02 都是2 位长的字符,且FLLD011 等于于“A ”,FLLD022 等于于“BCC”,那那我们执执行:EVAL FLDD04 = FFLD001 + FLLD011 + FLDD02FLD044 就等等于“AA A ”,也也就是第第二位与与第四位位都是空空的,最最后加的的FLDD02 其实无效。而如果执行行EVAL FLDD04 = %TRIIMR(FLDD01) + %TRRIMRR(FLLD011) + FLLD022则FLD004 就就等于“AABC”,也就是说,在这里,%TRIMR(FLD01),是等价于单字符“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