RPGLE 编程基础.docx

上传人:b****6 文档编号:8405164 上传时间:2023-01-31 格式:DOCX 页数:77 大小:67.27KB
下载 相关 举报
RPGLE 编程基础.docx_第1页
第1页 / 共77页
RPGLE 编程基础.docx_第2页
第2页 / 共77页
RPGLE 编程基础.docx_第3页
第3页 / 共77页
RPGLE 编程基础.docx_第4页
第4页 / 共77页
RPGLE 编程基础.docx_第5页
第5页 / 共77页
点击查看更多>>
下载资源
资源描述

RPGLE 编程基础.docx

《RPGLE 编程基础.docx》由会员分享,可在线阅读,更多相关《RPGLE 编程基础.docx(77页珍藏版)》请在冰豆网上搜索。

RPGLE 编程基础.docx

RPGLE编程基础

RPGLE编程基础

本章主要介绍RPGLE语言的基础知识,包括规范表,操作码,编译方法等,通过本章的学习了解并初步掌握RPGLE的基本操作码并应用于简单编程,能编译程序并查看跟踪错误,能使用单步调试源码方法,并能读懂简单的RPGLE程序。

1RPGLE规范表

•H表(Control):

指定程序使用的数据区

•F表(FileDescription):

文件说明

•I表(Input):

说明输入文件记录结构和数据

•C表(Calculation):

程序主体

•O表(Output):

说明输出文件记录结构

常用的表有F表,D表,C表

2操作码简介

RPGⅣ程序设计语言允许对数据进行多种类型的操作。

在计算规范表中写入的操作码指出要做的操作,通常是操作的缩写。

下表概括说明了每个操作码。

·一个空列表示此字段必须为空

·所有下划线的字段都是必须的

·一个下划线区域表明此位置没有结果指示器

符号符号说明

(H)四舍五入(整数的数值型结果)

(N)不锁定记录

(P)用空格或零填充结果

(D)操作描述符或日期字段

(T)时间字段

(Z)时间标记字段

+正的

-负的

BL空格

BN数值型空格

BOF文件头

EOF文件尾

EQ等于

ER错误

FD找到

HI大于

IN指示器

LD小于

LR最后一个记录

NR没有找到记录

NU数字

OFoff

ONon

Z零

ZB零或空格

操作码说明一览表

操作码

因子1

因子2

结果字段

结果指示器

71-72

73-74

75-76

ACQ

设备名

WORKSTN文件

ER

ADD(1/2)

加数

加数

+

-

Z

ADDDUR

日期/时间

期间:

期间码

日期/时间

ER

ANDxx

比较数

比较数

BEGSR

子程序名

BITOFF

位数

字符字段

BITON

位数

字符字段

CABxx

比较数

比较数

标号

HI

LO

EQ

CALL

程序名

列表名

ER

LR

CALLB(D)

过程名或过程指针

列表名

ER

LR

CASxx

比较数

比较数

子程序名

HI

LO

EQ

CAT(P)

源串1

源串2:

空格数

目的串

CHAIN(N)

查找自变量

文件名

数据结构

NR

ER

CHECK

(2)

比较串

基串:

开始

最左边位置

ER

FD

CHECKR

(2)

比较串

基串:

开始

最右边位置

ER

FD

CLEAR

*NOKEY

*ALL

结构或变量或记录格式

CLOSE

文件名

ER

COMMIT

边界

ER

COMP

(1)

比较数

比较数

HI

LO

EQ

DEFINE

*LIKE

参考字段

定义字段

DEFINE

*DTAARA

外部数据区

内部字段

DELETE

查找自变量

文件名

NR

ER

DIR(1/2)

被除数

除数

+

-

Z

DO

初值

限定值

索引值

DOU

指示器表达式

DOUxx

比较数

比较数

DOW

指示器表达式

DOWxx

比较数

比较数

DSPLY(4)

信息

输出队列

响应

ER

DUMP

标识符

ELSE

END

增量值

ENDCS

ENDDO

增量值

ENDIF

ENDSL

ENDSR

标号

返回点

EVAL

结果=表达式

EXCEPT

EXCEPT名

EXFMT

记录格式名

ER

EXSR

子程序名

EXTRCT

日期/时间:

期间码

目的字段

ER

FEOD

文件名

ER

FORCE

文件名

GOTO

标号

IF

指示器表达式

IFxx

比较数

比较数

IN

*LOCK

数据区名

ER

INER

KFLD

键字字段

KLIST

KLIST名

LEAVE

LOOKUP

(1)(数组)

查找自变量

数组名

HI

LO

EQ

LOOKUP

(1)表

查找自变量

表名

表名

HI

LO

EQ

MHHZO

源字段

目的字段

MHLZO

源字段

目的字段

MLHZO

源字段

目的字段

MLLZO

源字段

目的字段

MOVE(P)

源字段

目的字段

+

-

ZB

MOVEA(P)

源字段

目的字段

+

-

ZB

MOVEL(P)

日期/时间格式

源字段

目的字段

+

-

ZB

MVLT(1/2)

被乘数

乘数

+

-

Z

MVR

余数

+

-

Z

NEXT

程序设备

文件名

ER

OCCUR

出现值

数据结构

出现值

ER

ORxx

比较数

比较数

OTHER

OUT

*LOCK

数据区名

ER

PARM

目的字段

源字段

参数

PLIST

PLIST名

POST(3)

程序设备

文件名

INFDS名

ER

READ(N)

记录名,文件名

数据结构

ER

EOF

READC

记录名

ER

EOF

READE(N)

查找自变量

文件名,记录名

数据结构

ER

EOF

READP(N)

文件名,记录名

数据结构

ER

EOF

READPE(N)

查找自变量

文件名,记录名

数据结构

ER

EOF

REL

程序设备

文件名

ER

RESET

*NOKEY

*ALL

结构或变量或记录格式

ER

RETURN

SUB(1/2)

减数

被减数

+

-

Z

SUBDUR

(期间)

日期/时间

日期/时间

期间:

期间码

ER

SUBDUR

(新日期)

日期/时间

日期/时间

日期/时间

ER

SUBST(P)

选取长度

基串:

开始

目的串

ER

TAG

标号

TEST(D)

日期格式

日期或字符字段或数字字段

ER

TEST(T)

时间格式

时间或字符字段或数字字段

ER

TEST(Z)

时间标记或字符字段或数字字段

ER

TESTB

(1)

位数

字符字段

OF

ON

EQ

TESTN

(1)

字符字段

NU

BN

BL

TESTZ

(1)

字符字段

TIME

数字字段

UNLOCK

数据区,记录或文件名

ER

UPDATE

文件名

数据结构

ER

WHEN

指示器表达式

WHENxx

比较数

比较数

WRITE

文件名

数据结构

ER

EOF

XFOOT(1/2)

数组名

+

-

Z

XLATE(P)

从:

串:

开始

目的串

ER

Z-ADD(1/2)

加数

+

-

Z

Z-SUB(1/2)

减数

+

-

Z

 

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

'HELLOWORLD'DSPLY

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:

声明的文件,是外部描述的文件

F:

声明的文件,是一个程序描述文件

这里通常填“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值为日期型

F:

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

Write

U

F

A

Update或Delete

U

F

空或A(要求A是为了Write操作)

3.5

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1