其他还有CASXX、GOTO、EXSR(执行子程序)转移操作
3.重复执行某一操作/循环 A.DO ENDDO OPM RPG DO 10 Y 2 0 。。。 ENDDO ILE RPG DO *HIVAL IF Y>10 LEAVE ENDIF 。。。 EVAL Y = Y+1 ENDDO B.DOW ENDDO OPM RPG Y DOWLE 10 。。。 1 ADD Y Y ENDDO
其他还有DOUXX/DOU重复执行操作
ILE RPG DOW Y<=10 。。。 EVAL Y = Y+1 ENDDO 操作码
1.算术运算
ADD: RESULT = FACTOR1/RESULT + FACTOR2 SUB: RESULT = FACTOR1/RESULT + FACTOR2 Z-ADD: RESULT = 0 + FACTOR2 Z-SUB: RESULT = 0 - FACTOR2
MULT: RESULT = FACTOR1/RESULT * FACTOR2 DIV: RESULT = FACTOR1/RESULT / FACTOR2 MVR: RESULT = 上一个DIV操作的余数 SQRT: RESULT = FACTOR2的平方根 XFOOT: RESULT = FACTOR2数组的和
61676237.doc – 第 11 页 共 39 页
2.赋值操作
MOVE:RESULT = FACTOR2(右靠齐,字符型变量和P形变量可以互相赋值) 如果FACTOR2的长度小于RESULT的长度,则RESULT的其余部分保持不便; 如果FACTOR2的长度大于RESULT的长度,则FACTOR2种的多余部分将被忽略; MOVEL: RESULT = FACTOR2(左靠齐,字符型变量和P形变量可以互相赋值) 如果FACTOR2的长度小于RESULT的长度,则RESULT的其余部分保持不便; 如果FACTOR2的长度大于RESULT的长度,则FACTOR2种的多余部分将被忽略; MOVEA: RESULT = FACTOR2 (RESULT必须是个使用DIM定义的数组,FACTOR2可以是数
组,变量,常量,*BLANKS, *ZEROS, *ALL'XXX'。详细图解清参考RPG FOR AS/400 REFERENCE)
3. 比较操作:
COMP: FACTOR1与FACTOR2比较的结果由指示器表示 VAR1 COMP VAR2 99 *IN99 IFEQ ’1’
。。。 ENDIF
CABXX: FACTOR1与FACTOR2比较,如果结果为真的话就转移到RESULT指示的TAG VAR1 CABXX VAR2 TAG1 VAR1 CABXX VAR3 TAG2 ??.. TAG1 TAG ??.. TAG2 TAG ??.
CASXX: FACTOR1与FACTOR2比较,如果结果为真的话就执行RESULT指示的子程序
VAR1 CASXX VAR2/CONST SUBROUTINE1 VAR3 CASXX VAR4/CONST SUBROUTINE2 VAR5 CASXX VAR6/CONST SUBROUTINE3 CAS SUBROUTINE4 ENDCS
例:
DA1 S 2 0 INZ(50) DA2 S 2 0 INZ(20) C A1 DSPLY C A2 DSPLY C A1 CASGT A2 S#001 C A1 CASLT A2 S#002 C ENDCS C ENDPGM TAG
61676237.doc – 第 12 页 共 39 页
C EVAL *INLR = '1' C RETURN C S#001 BEGSR C 'A1>A2' DSPLY C GOTO ENDPGM C ENDSR C S#002 BEGSR
4.程序操作:
BEGSR: 子程序开始 ENDSR: 子程序结束 EXSR: 执行子程序 例:
SUB0001 BEGSR
EXSR SUB0001
???. ENDSR
注释:每一个程序中都可以有一个特殊的子程序*INZR,它无论被放在程序的什么部分都会被首先执行
*INZR BEGSR ??? ENDSR
程序例外出错检测子程序,当程序发现例外出错时,自动执行该子程序,做出下一步处理
*PSSR BEGSR 。。。 ENDSR
DABC S 3 0 DIM(10) DX S 2 0 C C MOVEA 1 ABC(X) C ABC(1) DSPLY C C ENDPGM TAG C EVAL *INLR = '1' C RETURN C C *PSSR BEGSR C 'SYS ERR' DSPLY C GOTO ENDPGM C ENDSR
61676237.doc – 第 13 页 共 39 页
5. 调用和转移操作:
CALL: 调用一个外部程序,该程序可以是RPG、CL或C程序等 CALL 'COUNT' PARM P1 PARM P2 RETRN/RETURN: 返回上一层程序,
6. 文件操作:
A. CHAIN: 用纪录号或键值从一个文件查找,如果文件是使用I方式打开的话,此操作不会在记录上加锁;如果使用U方式打开的话,就会。 MOVE ‘ABCD’ WWACNO
N1N2N3 WWACNO CHAIN FACNO(记录格式名) 8899 *IN88 IFEQ ‘1’
(RPG IV)或 IF *IN88 = ‘1’ (RPG IV)或 IF *IN88
(RPG IV)或 IF NOT %FOUND
MOVE ‘FER0001’ WWMGID GOTO ENDPGM ENDIF
*IN99 IFEQ '1' 纪录被锁 MOVE 'FER0002' WWMGID GOTO ENDPGM ENDIF ?? ENDPGM TAG
MOVE '1' *INLR RETRN
ACKEY KLIST
KFLD WWACNO KFLD WWSBNO MOVE ‘ABC’ WWACNO Z-ADD 10 WWSBNO
ACKEY CHAIN(N) FACNO(记录格式名) 8899 仅查找,不锁记录 *IN88 IFEQ '1'
MOVE 'FER0001' WWMGID GOTO ENDPGM ENDIF
*IN99 IFEQ '1'
MOVE 'FER0002' WWMGID
61676237.doc – 第 14 页 共 39 页
GOTO ENDPGM ENDIF ??.. ENDPGM TAG
MOVE '1' *INLR RETRN
B. CLOSE: 关闭文件(通常情况下,如果是注明用户打开的文件,在程序结束之前要CLOSE将文件关闭,如果是系统自动打开的文件,在程序结束时会自动关闭) CLOSE ACNOA(文件名)
C. OPEN: 打开文件,在程序对多成员文件进行操作时一般需要由用户自行打开和关闭数据文件
OPEN ACNOA(文件名)
D. COMIT/COMMIT: 文件修改落实,在文件定义(F表)中指明文件要由落实机制控制(COMMIT参数)
E. ROLBK/ROLBK : 文件修改回滚,在文件定义(F表)中指明文件要由落实机制控制(COMMIT参数)
F. DELET/DELETE: 删除记录
DELET FACNO(记录格式名)
G. EXFMT: 显示输出一个显示记录,并从标准输入读取数据 EXFMT CHOICE(一般文件显示记录格式名)
H. READ: 读一条记录
N1N2N3 READ FACNO(记录格式名) 99 *IN99 IFEQ '1'
(RPG IV)或 IF %EOF(到文件末)
MOVE 'FRD0001' WWMGID GOTO ENDPGM ENDIF
I. READE: 从当前记录位置开始寻找一个等于键字的记录,并读取 MOVE ‘A124’ WWACNO
N2N3
WWACNO READE FACNO 8899
*IN88 IFEQ '1' 纪录被锁
MOVE 'FER0002' WWMGID GOTO ENDPGM ENDIF
*IN99 IFEQ '1' 无匹配记录
(RPG IV)或 IF *IN99 = ‘1’ (RPG IV)或 IF *IN99
(RPG IV)或 IF NOT %FOUND
MOVE 'FER0003' WWMGID GOTO ENDPGM
61676237.doc – 第 15 页 共 39 页