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
2
3
4
5
*************** Beginning of data *******************
C 'HELLO' DSPLY
C 'WORLD!' DSPLY
C RETURN
****************** End of data **********************

完成之后使用

1
CALL 文件名

程序结束

image-20200927195612414

入口参数

程序可以通过*ENTRY定义入口参数,或称之为接口参数,来传递数据。
假设有程序FHS01ILE,其中入口参数的定义如下:

1
2
3
C *ENTRY PLIST
C PARM FLD01 3
C PARM FLD02 4

其中:
*ENTRY 在“Factor 1”项;
PLIST 在“Operation”项;
PARM 在“Operation”项;
FLD01、FLD02 都在“Result”项上述定义,表示这个程序通过两个字段与其它外部程序沟通。
那么别的程序(如FHS02ILE)在调用程序FHS01ILE 时,就要带上两个字符型变量,如

1
2
3
C CALL ‘FHS01ILE’
C PARM FHSFLD01 3
C PARM FHSFLD02 4

在两个程序里,这两个变量名可以不同(比如说一边叫FHSFLD01,FHSFLD02;一边叫FLD01,
FLD02),但长度类型必须匹配

入口参数的定义,可以写在程序的任何一处,而程序的执行,始终是从C 行的顺序第一行开始
执行,与入口参数所在的位置无关

D行说明

  • Name:

    定义的变量名字 可以不顶格写

  • E

    如果是程序内部自行定义一个临时变量 此处不填

    如果是引用一个外部文件作为数据结构 填 E ;同时“Declaration Type”处,就要填“DS”,即定义为一个结构;“Keywords”处要使用EXTNAME 关键字

    image-20200924134719303

  • 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
2
3
IF *IN12=’1’
EVAL FHS01=’01’
ENDIF

首位带N,后面填写01—99 的数字,表示相应的指示器关闭时,执行后面的操作
要注意,该项内容仅作用于该行操作码。如果指示器打开后,需要执行多条语句,那么每条语
句前面,该项都要赋值

所以说,根据指示器状态来执行的语句,在执行少量操作码时,可以使用这种方法;如果语句
较多,修改起来不方便,还是直接用IF—ENDIF 的判断语句比较合适

Factor 1

操作内容一,将在后面与操作码一起讲

Operation

操作码,后面有专门章节讲解操作码

Factor 2

操作内容二,同上

Result

操作结果,同上

Length

长度。

Decimal Positions

与length 相呼应,当此项有值时,表示定义的是一个数字型变量,该项表示小数位长度。

HI、LO、EQ

这是三个指示器位置项。可赋值的内容是从01—99,

操作码汇总

ILE 操作码分类:

  1. 程序流程控制
    DO、DOU、DOUxx、DOW、DOWxx、ITER、LEVAE
    IF、ELSE、ELSEIF、IFxx、ORxx、ANDxx
    SELECT、WHEN、WHENxx、OTHER、ENDxx、GOTO、TAG 、EXSR、BEGSR、ENDSR
    CABxx

  2. 初始化操作
    CLEAR、RESET

  3. 文件操作
    OPEN、CLOSE、
    CHAIN、SETGT、SETLL、READ、READC、READE、READP、READPE、DELETE、UPDATE、WRITE 、
    UNLOCK
    ROLBK、COMMIT、EXFMT、ACQ、EXCEPT、FEOD、FORCE、NEXT、POST、REL

  4. 程序调用
    CALL、CALLB、CALLP、PARM、PLIST、RETURN

  5. 赋值语句
    MOVE、MOVEA、MOVEL、EVAL

  6. 字符操作
    CAT、CHECK、CHECKR、SCAN、SUBST、XLATE

  7. 数字操作
    ADD、DIV(除)、MULT(乘)、MVR(除法取余)、SQRT(开方)、SUB、XFOOT、
    Z-ADD、Z-SUB

  8. 数组操作符
    LOOKUP、MOVEA、SORTA、XFOOT

  9. 数据区操作(没用过)
    IN、OUT、UNLOCK

  10. 日期操作
    ADDDUR、EXTRCT、SUBDUR、TEST

  11. 指示器操作
    SETOFF、SETON

  12. 信息操作(前两个没用过)
    DUMP、SHTDN、TIME、DSPLY

  13. 内存管理操作(完全没用过 )

    ALLOC、DEALLOC、REALLOC

  14. 位操作(没用过)
    BITOFF、BITON、TESTB

第二种编译方式

  1. CRTRPGMOD F4

    image-20200924223558082

  2. CRTPGM F4

    image-20200924223755594

DEBUG

在编译的时候要把*source打开

  1. STRDBG(输入程序名) f4 添加库名并且把 UPDPROD 项选为“*YES”
  2. 在合适的位置设置断点(F6)并退出(F12)
  3. 调用该程序(CALL 程序名,并赋对应的入口参数)
  4. 进入debug 模式后,可F10进行执行,F11查看字段的值(光标要定位到字段处),F6可以任意位置设置断点,F12退出debug模式。
  5. 退出debug模式后,输入 ENDDBG 命令。

如果File被锁

WRKOBJLCK

指定文件 填*FILE

错误代码原因查询

WRKMSGD CPF4131