




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
20用法ile rpg例子变量声明1、 整数 (i(整数)、b(二进制)、s(区位十进制)、p(压缩十进制)i(整数)只可为3、5、10、20个字节长。dpos1 s 5i 0 inz(*zero)dpos2 s 10i 0 inz(*zero)dpos3 s 3i 0 inz(*zero)dpos4 s 20i 0 inz(*zero)注意s(区位十进制)dpos5 s 16s 0 inz(*zero)2、 浮点数只能定义为4字节和8字节df1 s 4f inz(*zero)df2 s 8f inz(*zero)c eval f2=121212.12121212c f2 dsply c eval f1=121212.12121212c f1 dsply 注意在小数点位数必须为blank。8字节相当于doubledsply +1.212121212121200e+0054字节相当于floatdsply +1.2121212e+053、 字符串da s 30a inz(*blank)a 单字节或多字节n 指示符,单字节4、 数组这里只说明运行时数组darray s 2s 0 dim(12)引用array(下标),下标从1开始。dcharr s 5a dim(12)5、 基指针基指针必须为4字节,且必须与 4 字节边界对齐。6、 结构D ParmDS DS 1024D SFld1 5 0D SFld2 200D C *ENTRY PListC Parm ParmDSC* 这是我们经常使用的一种结构定义方式和使用方式,这种用于传递入口参数的数据结构,一定不能使用INZ关键字。C* 但是,如果该结构不是作为程序入口参数或是作为下级调用的接口参数,一般要在工程中约定使用INZ关键字。INZ关键字会让系统在程序被激活时,自动按结C* 构各子字段的类型自动初始化,否则上述结构中SFld1字段的值将是一个非法的空格值而不是数字零。Dmystru ds D name 20a D age 3s 0D memo 44a D addr 1 20a D tel1 21 32a D tel2 33 42a 或Dmystru ds 68 D name 20a D age 3s 0 D memo 44a D addr 20a overlay(memo:1) D tel1 12a overlay(memo:21)D tel2 12a overlay(memo:33)或Dmystru ds D name 20a D age 3s 0 D memo 44a D addr 20a overlay(memo) D tel1 12a overlay(memo:*next) D tel2 12a overlay(memo:*next) D other 12a 多重数据结构及使用Dmystru ds occurs(10) inz D name 20a D age 3s 0 D memo 44a D addr 20a overlay(memo) D tel1 12a overlay(memo:*next)D tel2 12a overlay(memo:*next)D other 12a Dcnt s 2s 0 inz(*zero) C*给第一个mystru赋值 C 1 occur mystru C eval name= 高殿华 C eval age=30 C eval addr= 河北省吴桥县 C eval tel1C eval tel2=03177348792 C eval other=12121212 C*给第二个mystru赋值C 2 occur mystru C*等同于C eval %occur(mystru)=2C eval name= 高殿华 C eval age=30 C eval addr= 河北省吴桥县 1111 C eval tel1C eval tel2=03177348792 C eval other=12121212 C*依次访问每个数组元素C for cnt=1 to 2 C cnt occur mystru C addr dsply C endfor 外部描述数据结构D DSName E DS EXTNAME(FileName) INZExtname(filename:fmtname) 关键字用来引用filename中的记录格式,如未制定记录格式名,则默认第一个记录格式名。文件状态数据结构F FileName CF E WORKSTN INFDS(FileDS)D FileDS DSD FileSt *STATUS数据域数据类型包括*CHAR,*DEC和*LGL三种。如果指定因子2,则它必须包含正在引用的OS/400 数据区。若未指定因子2,则将结果字段用作数据区名称。结果字段必须包含字段、数据结构、数据结构子字段或数据区数据结构。这与为检索因子 2 中指定数据区中的数据并将数据写至此数据区,而与 IN 和 OUT 操作一起使用的名称同名。在结果字段中指定数据区数据结构时,VisualAge RPG 应用程序在程序开始时检索数据区中的数据,并在程序结束时将数据写至数据区。1 本地数据域*LDA2 程序初始化参数数据域 *PDA3 外部描述数据域例子1、Dst_buf ds 60 inz D name 30 D addr 30 C *DTAARA DEFINE dataarea st_bufC*锁定数据区dataare,读取信息到st_buf中,并显示,然后赋于新值C *LOCK IN st_buf C name DSPLY C addr DSPLY C eval name=gaodianhuaC eval addr=wuqiao C OUT st_buf C UNLOCK st_buf C EVAL *INLR=1 C RETURN 例子2:D INFO S 60AC*数据区名称为:dataarea C *DTAARA DEFINE dataarea INFOC*锁定数据区,读取信息到INFO中,并显示,然后赋值于GAODIANHUAC *LOCK IN INFO C INFO DSPLY C EVAL INFO=GAODIANHUAC OUT INFO C UNLOCK INFO C EVAL *INLR=1 C RETURN IN :读数据区,当因子1是*LOCK时,则设置了读锁,不允许更新。OUT:写入数据区,当因子1是*LOCK时, 写操作后数据区保持锁定状态,当因子1为BLANK时, 数据区更新后解锁。UNLOCK:对IN或OUT锁定的数据区解锁.7、 常量十六进制文字的格式是:xx1x2.xn xx1x2.xn必须包含字符 a-f、a-f 和 0-9。日期文字的格式为 dxxxxxx,其中:d 指示文字是日期类型的 xxxxxx 是有效日期,其格式为控制规范上指定的格式 xxxxxx 包围在单引号()中。时间文字的格式为 txxxxxx,其中:t 指示该文字是时间类型的 xxxxxx 是有效时间,其格式为控制规范上指定的格式 xxxxxx 包围在单引号()中。时间戳记文字的格式为 zyyyy-mm-dd-hh.mm.ss.mmmmmm,其中:z 指示该文字是时间戳记类型的 yyyy-mm-dd 是有效日期(年-月-日) hh.mm.ss.mmmmmm 是有效时间(小时.分钟.秒.毫秒) yyyy-mm-dd-hh.mm.ss.mmmmmm 括在单引号中 毫秒是可选的,若未指定,则缺省为 0命名常量:可以代constd upper c abcdefghijklmnopqrstuvwxyzd lower c const(abcdefghijklmnopqrstuvwxyz)象征常数:*allx.,*allgk1k2,*alluxxxxyyyy,*allxx1.,*blank/*blanks,*hival,*loval, *null, *on/*off ,*zero/*zeros循环dcount s 3s 0 inz(*zero)dsum s 5s 0 inz(*zero)1.forc for count=0 to 100 c eval sum=sum+count c endfor c sum dsply c eval *inlr=1 c return 2.dowc eval count=0 c eval sum=0 c dow count100 c eval sum=sum+countc eval count=count+1c enddo c sum dsply 中断leave 进行下一次循环iter选择结构c if not (sum=5049 and count=100)c 10000 dsply c elseif sum = 5049 c 10001 dsply c elseif sum = 5051 c 10002 dsply c else c 10003 dsplyc*实现了嵌套c if sum=5050 c 10004 dsply c if sum 5049 c 10005 dsply c else c 10006 dsply c endif c else c 10007 dsply c endif c*实现了组选择c select c when sum=5051 c hhhh dsply c when sum=5050 c oooo dsply c other c pppp dsply c endsl 跳转语句gotoc goto tag1cc tag1 tagc.逻辑运算andor not算数运算+-*/%rem() /*例子见后面*/关系运算=*函数及原型的概念1、 主过程 EXAM10的源码Dvar1 s 10s 0 Dvar2 s 10s 0 Dresult s 15s 0 C *entry plist C parm var1 C parm var2 C parm result C eval result=var1+var2 C eval *inlr=1 C return 主过程由F、D、I、C、O规范表组成,使用*ENTRY PLIST语句指定模块入口参数。如果在控制表上没有标定NOMAIN关键字,模块入口参数还可以被指定为目标程序的入口参数,使用CALL或CALLB操作码来调用。Dvar1 s 10s 0 Dvar2 s 10s 0 Dresult s 15s 0 C eval var1=100 C eval var2=200 C call EXAM10 C parm var1 C parm var2 C parm result C result dsply C eval *inlr=1 C return 2、子过程(1)、有返回值,在调用时当作函数使用原型说明库名:hbrccu文件:exam成员:aaaaDresult s 10i 0 inz(*zero) Da s 10i 0 Db s 10i 0 D*原型说明Dfunction pr 10i 0 Da 10i 0 value Db 10i 0 value C eval a=10 C eval b=10 C*有返回值,当作函数使用 C eval result=function(a:b) C result dsply C EVAL *INLR=*ON C RETURN 库名:hbrccu文件:exam成员:bbbbHnomainD*原型说明(加粗部分为过程或函数的返回值说明,也可以没有返回值) Dfunction pr 10i 0 Da 10i 0 value Db 10i 0 value Dresult s 10i 0 D*子过程接口的定义(加粗部分表明可以被外部程序调用)Pfunction B export Dfunction pi 10i 0 Da 10i 0 value Db 10i 0 value C eval result=a+b C return result Pfunction E开始编译:CRTRPGMOD MODULE(HBRCCU/FUNC1) SRCFILE(HBRCCU/EXAM) SRCMBR(BBBB)CRTRPGMOD MODULE(HBRCCU/MAIN) SRCFILE(HBRCCU/EXAM) SRCMBR(AAAA)CRTPGM PGM(HBRCCU/FUNCTION) MODULE(HBRCCU/MAIN HBRCCU/FUNC1) 编译完成。(2)、没有返回值,使用CALLP调用(注意加粗部分的调用)库名:hbrccu文件:exam成员:aaaaDresult s 10i 0 inz(*zero) Da s 10i 0 Db s 10i 0 Dfunction pr Da 10i 0 value Db 10i 0 value Dresult 10i 0 C eval a=10 C eval b=10 C callp function(a:b:result)C result dsply C EVAL *INLR=*ON C RETURN 库名:hbrccu文件:exam成员:aaaaHnomain Dfunction pr Da 10i 0 value Db 10i 0 value Dresult 10i 0 Pfunction B export Dfunction pi Da 10i 0 value Db 10i 0 value Dresult 10i 0 C eval result=a+b C return Pfunction E 运行function后显示20.注意:(1)在加粗斜体部分,如果改成如下:Dresult 10i 0 value 则表明是值传递,在function中调用改变不影响其外部的值。运行后显示0. 注意value是值传递。(2)export 表明定义的这个子过程可以被外部调用。假如没有export关键字,在执行CRTPGM PGM(HBRCCU/FUNCTION) MODULE(HBRCCU/MAIN HBRCCU/FUNC1) 报错。 算数函数或操作码1、 addcl0n01factor1+opcode&extfactor2+result+len+d+hiloeqc 1 add sum sum c sum dsply c*相当于cl0n01factor1+opcode&extfactor2+result+len+d+hiloeqc eval sumsum1c sum dsply 2、subc sum sub 1 sum c sum dsply c*相当于c eval sum=sum-1c sum dsply3、multc 3 mult 2 sumc sum dsply c*相当于c eval sum=3*2c sum dsply4、divc 12 div 3 sumc sum dsply c*相当于c eval sum=12/3c sum dsply5、%rem()取余c eval count=%rem(13:3)c count dsply c*相当于c 14 div 3 sum c mvr countc count dsplyc*注意:mvr只能用在div操作码的后面,不能用在eval sum=14/3的后面,编译报错6、move和movelMove 自右向左取值赋值给int,并右靠齐Movel 自左向右取值赋值给int,并左靠齐Dchar1 s 1a inz(*blank) Dint s 2s 0 inz(*zero ) C eval char1 = 1 C movel char1 int C int dsply C eval *inlr=1 C return 此时字符串实际长度小于数字长度,movel时,此时int显示DSPLY 10Dchar1 s 1a inz(*blank) Dint s 2s 0 inz(*zero ) C eval char1 = 1 C move char1 int C int dsply C eval *inlr=1 C return 此时字符串实际长度小于数字长度,move时,此时int显示DSPLY 1Dchar1 s 2a inz(*blank) Dint s 2s 0 inz(*zero ) C eval char1 = 12 C move char1 int C int dsply C eval *inlr=1 C return 此时字符串实际长度等于数字长度,movel和move时,此时int都显示DSPLY 12Dchar1 s 3a inz(*blank) Dint s 2s 0 inz(*zero ) C eval char1 = 123 C movel char1 int C int dsply C eval *inlr=1 C return 此时字符串实际长度大于数字长度,movel时,此时int显示DSPLY 12move时,此时int显示DSPLY 23当int向char移动时也遵循这个结果.函数比较一、 字符函数da s 30a inz(*blank)db s 20a inz(*blank)dc s 50a inz(*blank)1、 字符串连接c eval a=gaodianhua c eval b= is a good boy c eval c=a+b c c dsply c*c的值dsply为 gaodianhua is a good boy c eval a=%trim(a)+%trimr(b)c a dsplyc*c的值dsply为 gaodianhua is a good boy 2、 扫描字符串c eval pos=%scan(oo:a:1)c if pos = 0 c not found dsply c else c pos dsply c endif 3、 %check(comparator:base:start) : 在base串中查找第一个不在comparator中存在的字符的位置,如果base中的所有字符均在comparator中存在,则返回0。%checkr(comparator:base:start):在base串中查找最后一个不在comparator中存在的字符的位置,如果base中的所有的字符均在comprator中存在,则返回0。4、%SUBST(字符串:开始位置:长度)返回自变量字符串的一部分。它也可用作带 EVAL 操作码的赋值的结果5、%STR(基指针:最大长度)(右边)%STR(基指针:最大长度)(左边)%alloc(number)Dealloc ptr1%realloc(ptr:number)Number必须是不带小数的非浮点数。%STR既可以用来获取以 NULL 结束的字符串(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 理财师考试考后总结及反思试题及答案
- 微生物检验信息技术应用试题及答案
- 证券交易所功能与2025年考试的关系试题及答案
- 企业财务信息透明度探讨试题及答案
- 2025年考试真题解析试题及答案
- 银行从业资格证考试科技应用前景分析试题及答案
- 项目调度技巧与工具比较试题及答案
- 注会考试重要考证点分析试题及答案
- 2025年证券从业资格证考试预测题及试题及答案
- 2025年证券从业资格证解读政策变化试题及答案
- 2025安徽中医药大学辅导员考试题库
- 我爱刷牙幼儿课件
- 智慧树知到《演讲学(同济大学)》2025章节测试附答案
- 高等数学(慕课版)教案 教学设计-3.4函数的单调性与极值;3.5函数的最值及其应用
- 政府审计 课件 第五章 金融审计
- 2025年度文化产业竞业禁止与知识产权保护协议
- 孕产妇分娩恐惧预防和管理的最佳证据总结
- 2025年国核铀业发展有限责任公司招聘笔试参考题库含答案解析
- 国家开放大学《小企业管理基础》综合练习题形成性考核参考答案
- 吊装设备知识培训课件
- 2025山东能源集团中级人才库选拔高频重点提升(共500题)附带答案详解
评论
0/150
提交评论