RPG入门
RPG
PG 的全称:Report Program Generator
IBM 的 AS/400 小型机上的高级语言.REPORT PROGRAM GENERATOR,程序运行效率很高.RPG 起始是一个非常简单的面向事务处理的编程语言, 用被储存在系统 IBM709 和 360 型号的 20 针打孔卡中的数据而生成报表.系统 3 由于它的硬式磁盘而带来了 RPG 2, 使它变成中型的 IBM 机器的标准应用程序语言
HelloWorld
使用132位
类型选择RPGLE
首行输入C 按F4
1 | *************** Beginning of data ******************* |
完成之后使用
1 | CALL 文件名 |
程序结束
入口参数
程序可以通过*ENTRY
定义入口参数,或称之为接口参数,来传递数据。
假设有程序FHS01ILE,其中入口参数的定义如下:
1 | C *ENTRY PLIST |
其中:
*ENTRY 在“Factor 1”项;
PLIST 在“Operation”项;
PARM 在“Operation”项;
FLD01、FLD02 都在“Result”项上述定义,表示这个程序通过两个字段与其它外部程序沟通。
那么别的程序(如FHS02ILE)在调用程序FHS01ILE 时,就要带上两个字符型变量,如
1 | C CALL ‘FHS01ILE’ |
在两个程序里,这两个变量名可以不同(比如说一边叫FHSFLD01,FHSFLD02;一边叫FLD01,
FLD02),但长度,类型必须匹配
入口参数的定义,可以写在程序的任何一处,而程序的执行,始终是从C 行的顺序第一行开始
执行,与入口参数所在的位置无关
D行说明
Name:
定义的变量名字 可以不顶格写
E
如果是程序内部自行定义一个临时变量 此处不填
如果是引用一个外部文件作为数据结构 填 E ;同时“Declaration Type”处,就要填“DS”,即定义为一个结构;“Keywords”处要使用EXTNAME 关键字
S/U
一般都填空
Declaration Type
定义变量的类型,允许的值如下:
DS: 数据结构
C: 常量 常量只能使用字符 不需要定义常量的长度 类型
常量的内容写在 keywords处 并使用const关键字 在程序段中 不能对常量赋值
S: 定义以下内容 独立变量 数组 表
From
当 “Declaration Type” 项为 S , DS 此项不填
当 “Declaration Type” 项为空 表示当前定义的变量 属于上面定义的结构 此时可以填写也可以不填写
当填写时,“From”项表示变量在结构中的起始位置,右对齐;“To/length”表示变量在结构
中的结束位置,也是右对齐。
当不填写时,“To/length”表示直接定义为变量长度。Internal Data Type
A: 变量定义为字符型
B: 二进制
D: 变量定义为日期型
F: 变量定义为浮点型
G: 变量定义为图型(非英文,汉字)
I: 变量定义为带符号的整数
N: 变量定义为指示器变量(没用过)
P: 变量定义为压缩型数字
S: 变量定义为普通的数型
T: 变量定义为时间型
U: 变量定义为无符号的整数
Z: 变量定义为日期+时间型(格式:年-月-日-时.分.秒.微秒)
*: 变量定义为指针型
Keywords
CONST: 定义常量的值
DIM: 定义数组
EXTNAME:引用外部文件作为数据结构变量
EXTFLD: 对引用了外部文件作为数据结构的某个变量,进行重命名
LIKE: 定义变量时,参照已存在的变量定义
OCCURS: 定义结构体变量时,指定的结构体变量的记录条数
INZ: 定义变量时,赋值初始值
DATFMT: 定义日期变量时,指定日期格式
*MDY (mm/dd/yy)
*DMY (dd/mm/yy)
*YMD (yy/mm/dd)
*JUL (yy/ddd)
*ISO (yyyy-mm-dd)
*USA (mm/dd/yyyy)
*EUR (dd.mm.yyyy)
补充说明 :
变量的定义,除了在D 行定义之外,还可以在C 行通过赋值语句直接定义
如
D FLD01 S 2 INZ(‘01’)
与
C MOVE ‘01’ FLD01 2 //2 在length 处,右对齐
是等价的
C行说明
Level
一般不填
N01
这个含义比较丰富,我只用过其中一种:
首位不带N,后面填写01—99 的数字时,表示相应的指示器打开时,执行后面的操作,
如:
1 | C 12 EVAL FHS01=’01’ |
等价于
1 | IF *IN12=’1’ |
首位带N,后面填写01—99 的数字,表示相应的指示器关闭时,执行后面的操作
要注意,该项内容仅作用于该行操作码。如果指示器打开后,需要执行多条语句,那么每条语
句前面,该项都要赋值
所以说,根据指示器状态来执行的语句,在执行少量操作码时,可以使用这种方法;如果语句
较多,修改起来不方便,还是直接用IF—ENDIF 的判断语句比较合适
Factor 1
操作内容一,将在后面与操作码一起讲
Operation
操作码,后面有专门章节讲解操作码
Factor 2
操作内容二,同上
Result
操作结果,同上
Length
长度。
Decimal Positions
与length 相呼应,当此项有值时,表示定义的是一个数字型变量,该项表示小数位长度。
HI、LO、EQ
这是三个指示器位置项。可赋值的内容是从01—99,
操作码汇总
ILE 操作码分类:
程序流程控制
DO、DOU、DOUxx、DOW、DOWxx、ITER、LEVAE
IF、ELSE、ELSEIF、IFxx、ORxx、ANDxx
SELECT、WHEN、WHENxx、OTHER、ENDxx、GOTO、TAG 、EXSR、BEGSR、ENDSR
CABxx初始化操作
CLEAR、RESET文件操作
OPEN、CLOSE、
CHAIN、SETGT、SETLL、READ、READC、READE、READP、READPE、DELETE、UPDATE、WRITE 、
UNLOCK
ROLBK、COMMIT、EXFMT、ACQ、EXCEPT、FEOD、FORCE、NEXT、POST、REL程序调用
CALL、CALLB、CALLP、PARM、PLIST、RETURN赋值语句
MOVE、MOVEA、MOVEL、EVAL字符操作
CAT、CHECK、CHECKR、SCAN、SUBST、XLATE数字操作
ADD、DIV(除)、MULT(乘)、MVR(除法取余)、SQRT(开方)、SUB、XFOOT、
Z-ADD、Z-SUB数组操作符
LOOKUP、MOVEA、SORTA、XFOOT数据区操作(没用过)
IN、OUT、UNLOCK日期操作
ADDDUR、EXTRCT、SUBDUR、TEST指示器操作
SETOFF、SETON信息操作(前两个没用过)
DUMP、SHTDN、TIME、DSPLY内存管理操作(完全没用过 )
ALLOC、DEALLOC、REALLOC
位操作(没用过)
BITOFF、BITON、TESTB
第二种编译方式
CRTRPGMOD F4
CRTPGM F4
DEBUG
在编译的时候要把*source
打开
- STRDBG(输入程序名) f4 添加库名并且把 UPDPROD 项选为“*YES”
- 在合适的位置设置断点(F6)并退出(F12)
- 调用该程序(CALL 程序名,并赋对应的入口参数)
- 进入debug 模式后,可F10进行执行,F11查看字段的值(光标要定位到字段处),F6可以任意位置设置断点,F12退出debug模式。
- 退出debug模式后,输入 ENDDBG 命令。
如果File被锁
WRKOBJLCK
指定文件 填*FILE
错误代码原因查询
WRKMSGD CPF4131