RPGLE 编程基础Word文档下载推荐.docx
《RPGLE 编程基础Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《RPGLE 编程基础Word文档下载推荐.docx(77页珍藏版)》请在冰豆网上搜索。
71-72
73-74
75-76
ACQ
设备名
WORKSTN文件
ER
ADD(1/2)
加数
和
+
-
Z
ADDDUR
日期/时间
期间:
期间码
ANDxx
比较数
BEGSR
子程序名
BITOFF
位数
字符字段
BITON
CABxx
标号
HI
LO
EQ
CALL
程序名
列表名
LR
CALLB(D)
过程名或过程指针
CASxx
CAT(P)
源串1
源串2:
空格数
目的串
CHAIN(N)
查找自变量
文件名
数据结构
NR
CHECK
(2)
比较串
基串:
开始
最左边位置
FD
CHECKR
(2)
最右边位置
CLEAR
*NOKEY
*ALL
结构或变量或记录格式
CLOSE
COMMIT
边界
COMP
(1)
DEFINE
*LIKE
参考字段
定义字段
*DTAARA
外部数据区
内部字段
DELETE
DIR(1/2)
被除数
除数
商
DO
初值
限定值
索引值
DOU
指示器表达式
DOUxx
DOW
DOWxx
DSPLY(4)
信息
输出队列
响应
DUMP
标识符
ELSE
END
增量值
ENDCS
ENDDO
ENDIF
ENDSL
ENDSR
返回点
EVAL
结果=表达式
EXCEPT
EXCEPT名
EXFMT
记录格式名
EXSR
EXTRCT
日期/时间:
目的字段
FEOD
FORCE
GOTO
IF
IFxx
IN
*LOCK
数据区名
INER
KFLD
键字字段
KLIST
KLIST名
LEAVE
LOOKUP
(1)(数组)
数组名
LOOKUP
(1)表
表名
MHHZO
源字段
MHLZO
MLHZO
MLLZO
MOVE(P)
ZB
MOVEA(P)
MOVEL(P)
日期/时间格式
MVLT(1/2)
被乘数
乘数
积
MVR
余数
NEXT
程序设备
OCCUR
出现值
ORxx
OTHER
OUT
PARM
参数
PLIST
PLIST名
POST(3)
INFDS名
READ(N)
记录名,文件名
EOF
READC
记录名
READE(N)
文件名,记录名
READP(N)
READPE(N)
REL
RESET
RETURN
SUB(1/2)
减数
被减数
差
SUBDUR
(期间)
期间:
(新日期)
SUBST(P)
选取长度
TAG
TEST(D)
日期格式
日期或字符字段或数字字段
TEST(T)
时间格式
时间或字符字段或数字字段
TEST(Z)
时间标记或字符字段或数字字段
TESTB
(1)
OF
ON
TESTN
(1)
NU
BN
BL
TESTZ
(1)
TIME
数字字段
UNLOCK
数据区,记录或文件名
UPDATE
WHEN
WHENxx
WRITE
XFOOT(1/2)
XLATE(P)
从:
至
串:
Z-ADD(1/2)
Z-SUB(1/2)
3程序代码行的编写
3.1最简单的RPGLE程序
为便于理解,这里写一个最简单的RPGLE程序
CL0N01Factor1+++++++Opcode&
ExtFactor2+++++++Result++++++++Len++D+HiLoEq
***************Beginningofdata*************************************
0001.00C'
HELLOWORLD'
DSPLY
0002.00CRETURN
******************Endofdata****************************************
这个程序编译成功,并调用(CALL程序名),就是在屏幕上反白显示“HELLOWORLD”字样。
(其中,绿色字样,是系统自动显示的,下同)
与其他语言不同,RPGLE中的编码,是有一定的格式,如果写错,将会在当前代码行上高亮反绿显示。
初学者如果不太清楚从何处开始下手,可以使用“F4”键查看(F4键只有用2进入的编辑状态才有效,用5进入的查看状态是无效的)
LevelN01Factor1OperationFactor2Result
'
Decimal
LengthPositionsHILOEQComment
关于每一项所对应的内容代表什么意思,该如何填写,即如何写程序,将会在下面的具体讲解。
3.2举例准备
列出表名,字段,以方便下面的举例。
假设有PF文件叫PFFHS,文件的记录格式叫FMTFHS
每条记录,都是由FHS01、FHS02、FHS03三个字段组成,每个字段都是两位长的字符型变量。
逻辑文件PFFHSL1的键值为FHS01
逻辑文件PFFHSL2的键值为FHS02
逻辑文件PFFHSL3的键值为FHS01、FHS02
文件的记录格式在RPGLE的程序中,不能与文件名相同。
3.3简单的程序流程
FPFFHSUFEDISK
CREADFMTFHS
CEVALFHS01=”01”
CUPDATEFMTFHS
CSETONLR
CRETURN
这个程序的意思,是说读PFFHS这个文件,然后将读到的第一条记录中的FHS01这个字段的值修改为“01”。
“SETONLR”,LR的位置可在HI、LO、EQ中任选一处。
意思是指将打开指示器*INLR,即赋值使指示器*INLR的值等于1。
等价于“EVAL*INLR=’1’”,意思是强制将内存中的数据写到磁盘中。
(基于效率因素,系统在修改文件时,会先将修改的结果先放在内存中,在同一程序中,读取数据也是先从内存中查询。
)LR,取自是LastRecord
从这个程序中,可以看到,RPGLE的程序,大致上可以分为两个部分:
1、声明、定义部分:
声明程序中使用到的文件(F行),定义程序中使用的变量(D行)
2、程序运行部分:
即C行,也就是程序段。
在RPGLE程序中,F行必须在D行前面,D行必须在C行前面。
程序执行的起始顺序,将从定义部分之后,第一个C行开始,顺序向下执行。
程序中的F行、D行都不是必须项,一个程序可以没有F行(如仅完成计算功能的公共函数,比如计算利息),也可以没有D行(没有需要特别定义的变量,或者所有变量都在C行进行定义),但不应该没有C行,因为F行与D行都属于非执行行,是起定义作用;
C行是执行行。
没有C行的程序,是无执行意义的。
3.4常见的程序流程
FPFFHSUFEDISK//声明文件PFFHS
DLSFLD01S2//定义临时变量LSFLD01
CEVALLSFLD01=’01’//给变量LSFLD01赋值
CEXSRSUB#UPD//执行子过程SUB#UPD
CEVALLSFLD02=’02’//给变量LSFLD02赋值
CEXSRSUB#UPD//执行子过程SUB#UPD
CSETONLR//数据写入磁盘
CRETURN//程序结束
CSUB#UPDBEGSR//子过程SUB#UPD开始
CREADFMTFHS//读PFFHS文件
CEVALFLD01=LSFLD01//给字段FLD01赋值
CUPDATEFMTFHS//修改文件
CENDSR//子过程结束
“//”后面的,只是简单的解释.
系统在运行这个程序时,是按如下的顺序来执行:
1.首句EVAL赋值语句,直接执行;
2.当系统发现操作码“EXSR”时,根据后面的变量名“SUB#UPD”,去查找对应的“SUB#UPDBEGSR”语句;
3.然后从“SUB#UPDBEGSR”之后,顺序向下执行,直至“ENDSR”语句
4.执行到“ENDSR”之后,将会再回到当初的“EXSRSUB#UPD”处,继续向下执行,直到RETURN语句为止
这里提出一点要注意,如果子过程中,又执行了自身,即在SUB#UPD程序中,又出现了“EXSRSUB#UPD”,是可以编译通过的,但在执行过程中,系统会因为无法定位,而出现死循环,直至报错异常中断退出。
也就是RPGLE的程序中,子过程不允许出现递归。
3.5F行说明
3.5.1内容说明
(需要以图表的形式详细描述—待补充)
首位填上F,然后按F4,会出现如下内容:
FileFileEndofFile
FilenameTypeDesignationFileAdditionSequence
FileRecordLimitsLengthofRecord
FormatLengthProcessingKeyFieldAddressType
File
OrganizationDeviceKeywords
Comment
各项的含义分别是:
Filename:
需要声明的文件名,必须顶格,文件名必须唯一,也就是程序中对同样的文件名不能声明两次。
FileType:
声明文件的处理类型。
必须填写。
允许的选项有:
I:
输入型,即只读文件,对声明的文件只取其记录的值,不对记录进行修改
U:
修改型,即对声明的文件进行修改操作(删除记录属于修改操作的一种)
O:
输出型,即只写,对声明的文件只进行写操作。
C:
混合型,用于对屏幕文件的定义。
(混合型,即输入/输出型,以屏幕文件为便,也就是读取屏幕文件的一些输入字段信息,同时也可以输出一些字段的值到屏幕文件中,但不能对屏幕文件自身进行修改,所以与上面的U是有区别的)
FileDesignation:
文件的指定方式,允许的选项有:
不填:
表示这是一个输出文件,即“FileType”项为“O”时,此项不填
F:
常用,简单的理解为不考虑cycle(循环控制):
当“FileType”为I,U,C时,这里填“F”
当“FileType”为O时,这里不填写
EndofFile:
程序结束前,对记录的处理方式。
可以不填,或填“E”。
FileAddtion:
是否会增加文件中的记录,即是否会对文件进行写操作。
可以不填,或填“A”
当FileType为“O”时,系统自动默认此项为“A”,不必填写;
当FileType为“I”,或“U”时,这项内容可以填“A”,也可以不填。
不填,即表示不会增加文件中的记录,也就是没有写操作;
填“A”时,即表示会增加文件中的记录,也就是会对文件进行写操作。
Sequence:
针对cycle使用的,表示排序顺序。
当定义为非cycle文件时,即“FileDesignation”项非“P”、“S”时,此项必须为空;
当定义为cycle文件时,即“FileDesignation”项为“P”、或“S”时,此项可填空、A、D。
A表示升序,D表示降序。
因为CYCLE现在已不常用,所以通常不填。
FileFormat
文件格式,不能为空,允许的值有:
E:
声明的文件,是外部描述的文件
声明的文件,是一个程序描述文件
这里通常填“E”,即为外部描述文件
RecordLength
“FileFormat”为“F”时,才需要填写。
通常不填
LimitProcessing
通常不填。
LengthofKeyField
查询时,索引键值的长度
如果“FileFormat”项等于“E”,即外部描述文件时,此项不填
如果“FileFormat”项等于“F”,便不需要按KEY值查询时,此项也不填
如果“FileFormat”项等于“F”,需要按KEY值查询时,此项填写KEY值的长度(1—2000)。
因为一般都使用外部描述文件,所以这里一般都不填写。
RecordAddressType
记录寻址类型,好象是对文件键值的描述。
允许的值如下:
空:
不使用KEY值,在程序段中,不会对文件的查询定位操作,如“SETLL”、“CHAIN”操作码都不会用的时,该项填空。
K:
使用KEY值,即表示会对声明的文件进行查询定位操作,此时声明的文件必须有键值,即必须为逻辑文件(LF文件),或在生成文件时,已加入了KEY值。
(下面的选项应该是程序描述文件才会使用)
A:
KEY值为字符型
D:
KEY值为日期型
KEY值为数字型
G:
KEY值为非英文字符
P:
KEY值为压缩型数字
T:
KEY值为时间型
Z:
KEY值为timestamp?
总之,如果要按照键值对声明的文件进行查询定位操作(即程序中使用了CHAIN、SETLL操作码,则此项需要填写“K”;
如不需要进行查询操作,则不填。
),此项填“K”时,声明的文件必须含有KEY值。
Device
声明文件的存放位置,必须填写,允许的值有:
DISK:
磁盘文件,即文件存储在磁盘上,最常见的;
PRINTER:
打印文件,提供打印输出描述,以及对打印设备访问。
打印报表用这个;
WORKSTN:
workstation,工作站,显示文件。
屏幕文件(DSPF)的定义用这个值
Keyword
可以不填,常用的值有(这里只列出几个常用的):
COMMIT
该文件记录的数据操作进行日志处理(关于日志处理,后面会章节会讲到)
RENAME
对文件记录格式名进行重命名。
比如说程序中需要同时声明PFFHSL1,PFFHSL2这两个逻辑文件。
这两个逻辑文件的记录格式名都是一样(通常和PF一样,即都为FMTFHS;
不过也可以定义成不同。
如果不同,当然就不需要使用RENAME键字了)。
那么,为了能让系统区分,就必须对其中一个的记录格式名进行重命名。
RENAME的语法:
RENAME(旧记录格式名:
新记录格名),如下:
FPFFHSL1IFEDISK
FPFFHSL2IFEDISKRENAME(FMTFHS:
FMTFHS2)
新记录格式可以自由定义,只要在该程序中无同名的即可。
RENAME并不会真正的更改文件的记录格式名,仅是在当前运行程序中进行重命名。
对同时运行的其它程序无影响
USROPN
对于声明的文件,由用户自行打开。
如果不填写此关键字,系统将会在程序最最开始(执行第一句C行语句前),自动执行“OPEN文件”的操作,在程序结束后,自动执行“CLOSE文件”的操作。
而填写此关键字之后,OPEN,CLOSE的操作将由用户在C行程序段中,自行处理。
如果用户未执行OPEN操作,就执行CHAIN、READ、SETLL等语句,在编译程序时就会报错。
程序在结束之前,必须关闭所有已打开的文件,所以用起来会比较繁琐。
USROPN常作用于对文件的解锁,在同一程序中打开同一文件的不同MEMBER等,属于一个较高级的用法,可在实际操作中慢慢体会。
OPEN,CLOSE的操作码,对应的是文件名,不是记录格式名。
即
COPENPFFHSL1
CCLOSEPFFHSL1
而不是
COPENFMTFHS
Comment
注释说明。
源自RPG,在RPG中是有作用的,可以对程序作简短的说明,但在RPGLE中,其实已经没有作用了,此项不用填。
(填了也没用)
小结:
1文件描述说明中的源列
列
位置
内容
顺序数
1~5
任选的顺序数或注释
格式类型
6
F-文件描述说明
注释标记
7
在本栏填入*以表示整行为注释行
7~16
DB2400文件名
文件类型
17
I-输入文件
O-输出文件
U-更新文件
文件标示
18
空--若位置17为O
F--若位置17为I或者U
文件结尾
19
对全过程文件总是空的
文件添加
20
空–在输入或者更新文件中不添加记录
A–使用write操作在输入或更新文件中添加记录(本列对输出文件无效)
顺序
21
对于全过程文件总是空的
文件格式
22
E-标示外部描述文件
记录长度
23~27
对于外部描述文件总是空的
极限处理
28
键标的长度
29~33
记录地址类型
34
空–按RRN存取记录
K-按键值存取记录
文件组织
35
设备
36~42
Disk–标示数据库文件
不用
43
注释行
功能
44~80
关键字项(待另表补充DB2/400P108)
2I/O操作类型的F项
操作类型
文件类型(位17)
文件标示(位置18)
文件添加(位置20)
Read、ReadP、ReadEReadPE
ChainSetGT或SetLL
I或U
F
空或者A(要求A是为了使用Write操作)
Write
O
空
U
A
Update或Delete
空或A(要求A是为了Write操作)
3.5