rpg是什么意思

更新时间:2022-11-22 17:23:51 阅读: 评论:0


2022年11月22日发(作者:国民教育系列学历)

AS400如何编写RPG程序

As400如何编写RPG程序

1.写给刚接触AS/400的朋友---如何建立库、文件和成员

鉴于很多朋友都还是刚接触AS/400,我就从系统登陆开始简单说说吧~

打开AS/400仿真终端(可以是PCOM、CA等软件,如何配置就不说了),输入用

户名和密码,进入系统。

如果你的权限足够的话,可以使用CRTLIB命令给自己建个库,如:

CRTLIBLIB(MYLIB)TYPE(*TEST)TEXT('fortest')库建好之后,你可以使

用STRPDM->2,在Library处输入库名MYLIB,按确认键就进入该库。这时库下面

没任何文件,你可以使用CRTSRCPF命令建立一个源物理文件,用来放置源码,如:

CRTSRCPFFILE(MYLIB/MYSRCPF)IGCDTA(*YES)TEXT('源物理文件')【注:】参数

IGCDTA(*YES)表示该源物理文件里头的源码文件都可以使用中文

到此为止,自己存放源码的地方已经生成,你可以直接使用以下命令直接进入

该源物理文件:WRKMBRPDMFILE(MYLIB/MYSRCPF)

进入该文件之后,就可以建立任何源码文件了,按F6,显示“StartSource

EntryUtility

(STRSEU)”画面,参数说明如下:

member:表示建立的成员名,我们把它理解成存放源码的文件就可

以,类似WINDOW平台的TXT文件;

type:表示建立的成员名的类型,如果不确定,可按F4查看,常

用类型有

(1)PF:物理文件;

(2)LF:逻辑文件;

(3)RPG:RPG程序源码文件;

(4)RPGLE:RPGLE程序源码文件;

(5)DSPF:显示文件;

(6)CLP:CLP程序源码文件;

(7)CMD:命令文件

……

'description':表示对该文件的描述,可填可不填。

上面的参数填好之后,即进入源码编辑环境,可以写代码了。

代码写完之后:

1.如果要保存并且退出编辑器,按F3,出现“Exit”画面,参数

Change/createmember置为Y即可。

2.如果只想保存而不想退出的话,在编辑器的顶端的命令行输入SAVE,按确

认键即可。3.如果要放弃更改,那么在编辑器的顶端的命令行输入CAN,按确认

键即可。

以上整个过程,介绍了登陆系统、建立库、建立源物理文件、建立成员(即源

码文件)的过程。有欠妥之处,请不吝赐教~

1

RPG开发步骤

1、建立数据库和源物理文件。CRTLIB和CRTSRCPF。

2、在SEU输入源语句建立相关的PF、LF、DSPF。PF~物理文件LF~逻辑文件

DSPF~显示

文件。

3、用CRTPF、CRTLF、CRTDSPF命令建立物理文件、逻辑文件、显示文件、

4、在SEU中输入源语句(RPG源语句),按照H、F、D、I、C、O顺序输入,其

中H~指控

制规范表,F~文件描述规范表,D~定义规范表、I~输入规范表、C~计算规范

表、O~输出规范

表。

5、建立程序:CRTPGMRPG如果编译通过的话,则可以用CALL程序名,来调

用程序。

小提示:如果发现建立文件时,出现找不到某某的信息时,请先用EDTLIBL把

文件的LIB加

入。

写给刚接触RPG的朋友---如何编写RPG程序(1)

这部分我也循序渐进的讲解如何RPG里头更项的含义。

先说说RPG一般用来做什么吧,举例说:

1.整个RPG程序不包含任何外部程序,只是做些简单的数学运算,或者对数

据区、DATAQ等

非文件目标进行操作,这属于相对最简单的情况;

程序对物理文件或者逻辑文件进行读、写、更新、删除操作;

程序结合物理文件或逻辑文件、以及显示文件进行操作,这属于比较复

杂的情况;

程序结合物理文件或逻辑文件、显示文件、以及ICF文件(即通讯文件)

进行操作,这

种情况也比较复杂。

当然,以上的情况只是平时使用的归纳,你也可以根据自己的实际需要结合各

种情况,此处不再

深入探讨。

以下结合例子简单说说各种情况,假设以下源码文件存放的路径是库MYLIB、

源物理文件

MYSRCPF

1.(1)做个简单的运算,比如AXB/(C-D)+E,有加减乘除等运算,代码如下:

.....CL0N01N02N03Factor1+++OpcdeFactor2+++ResultLenDHHiLoEqComments+

+++

***************Beginningofdata

*************************************

CZ-ADD2A10

CZ-ADD10B20

CZ-ADD5C10

CZ-ADD1D10

CZ-ADD2E10

CZ-ADD0TEM30

CZ-ADD0RST30

CAMULTBTEM

CCSUBDRST

2

CTEMDIVRSTRST

CMVRTEM230

CRSTADDERST

CRST

DSPLY.....CL0N01N02N03Factor1+++OpcdeFactor2+++ResultLenDHHiLoEqComment

s+

+++

CSETONLR

******************Endofdata

****************************************【注】

(a)Z-ADD表明把Factor2处的变量值赋给Result处的变量,值得注意的是这

两个变量都是数值型的,例如,"Z-ADD2A10"表示把2赋给变量A,后面的"10"

中的“1”表示变量A的长度是1,“0”表示小数位长度是0,即A是一个长度为

1整型变量;

(b)MULT表示做乘法运算,“AMULTBTEM”表示AXB,把结果赋给整型变量

TEM;

(c)SUB表示做减法运算,“CSUBDRST”表示C-D,把结果赋给整型变量

RST;

(d)DIV表示做除法运算,“TEMDIVRSTRST”表示TEM/RST,把结果赋给整

型变量RST;

(e)MVR表示做取余数运算,“MVRTEM230”表示把余数赋给整型变量TEM2;

(f)ADD表示做取加法运算,“RSTADDERST”表示RST+E,把结果赋给整型

变量RST,这句一般写成“ADDERST”也可以。

(g)DSPLY表示显示变量值,“RSTDSPLY”表示显示变量RST的值;

(h)SETON表示给指示器置为*ON的状态,即'1',“SETONLR”表示把LR指

示器置为*ON,该句的意思表示最后一条记录,即程序结束。

按F3保存,假设该文件名是MYRPG,所在的库是MYLIB,源物理文件是

MYSRCPF。

程序写好之后,应该进行编译了。用WRKMBRPDMFILE(MYLIB/MYSRCPF),找到

刚才的文件MYRPG,输入14,按F4,进入“CreateRPG/400Program

(CRTRPGPGM)”画面,参数:(i)Program:生成的目标名(假如为MYOBJ);

(ii)Library:生成的目标存放的库(假如为MYLIB)。

参数填好之后,按确认键即进行编译,如果程序没错,则生成目标文件,假设

为MYOBJ。在命令行输入CALLMYLIB/MYOBJ,这时命令上应该显示RST的值。

(【注】目标即可执行文件)

续《写给刚接触RPG的朋友---如何编写RPG程序(1)》

上文中,只举例说明了如何进行简单的数学运算,下面再举一例子讲解如何操

作数据区

(DATAARA)和数据队列(DTAQ)。

============================================================

3

1.(1)如何建立数据区(DATAARA)

【注:下面只建立*CHAR型的数据区,其他类型的有兴趣可以自己试试】:

在系统命令行输入CRTDTAARA,按F4,进入“CreateDataArea

(CRTDTAARA)”画面,参

数如下:

(a)Dataarea:数据区的名字,这里假设为MYDTAARA;

(b)Library:存放数据区的库,默认值是*CURLIB,即当前库,这里我们输入

MYLIB;

【注】MYLIB库之前的文章里头已建立,这里不再重复讲述了,如果还不知道

如何建立,请参考

《写给刚接触AS/400的朋友---如何建立属于自己的库、文件和成员》

(c)Type:数据区的类型,

*DEC数值型,

*CHAR字符型,

*LGL逻辑型,

*DDM分布式数据管理(这个我没用过),

这里我们选择*CHAR;

(d)Length:数据区的长度,这里假设是20,当然你可以根据自己需要输入对

应的长度值;

(e)Decimalpositions:指小数位位数,一般是针对*DEC型的才需要设置;

(f)Initialvalue:数据区初始值,可填可不填,我们这里选择不填,在程

序里进行更改;

(g)Text:注释。

整个命令请参考如下:

CRTDTAARADTAARA(MYLIB/MYDTAARA)TYPE(*CHAR)LEN(20)

TEXT('建立属于自己的数据区MYDTAARA')

(2)在RPG里如何操作数据区,假设该源码文件名为DTAARAR,存放在

MYLIB/MYFILE下:

Columns...:171EditMYLIB/MYFILE

SEU==>DTAARAR

FMTDS.....IDsname....NODsExt-

file++.............OccrLen+....................***************

Beginningofdata*******************************

0001.00I#DTADS20FMT

J......I....................................PFromTo++DFiel

d+L1M1FrPlMnZr.0002.00I18CURDAT0003.00I1116CURTMEFMT

C.....CL0N01N02N03Factor1+++OpcdeFactor2+++ResultLenDHHiLoEq0004.00C

*NAMVARDEFN

MYDTAARA#DTA

0005.00C*LOCKIN#DTA0006.00CTIMEDATTME140

0007.00CMOVE

DATTMECURDAT

0008.00CMOVELDATTMECURTME

0009.00COUT#DTA0010.00CUNLCK#DTA

4

0011.00CSETONL

R

******************Endofdata********************************

【注】

(a)第一行#DTA是字段名,与上面的Dsname左对齐,

DS表示#DTA是个字段,与上面的Ds对齐,

20表示字段#DTA的长度,与上面的Len+右对齐,注意,由于我们需要用它来

定义数据区

MYDTAARA的格式,所以长度要和MYDTAARA相同,

整行的意思是定义一个长度20的字段#DTA;

(b)第二第三行进一步详细定义字段#DTA的内部结构,

第二行的CURDAT是字段名,与Field+左对齐,1与From右对齐,8与To++右

对齐,整行的意思是

把大字段#DTA的第1,8位定义位另一个字段,第三行同样的意思,在此不在赘

述;(c)第四行的DEFN表示定义,一般用来定义字段和数据区,

*NAMVAR是定义数据区格式时必用的参数,

整行的意思就是把数据区MYDTAARA的格式按照字段#DTA定义,以后对字段

#DTA进行操

作就等于对数据区MYDTAARA进行操作;

(d)第五行的IN用来读数据区,*LOCK表示操作时把数据区MYDTAARA锁住,

一般只有对数据区进行更

新操作才需要设置才参数,如果只是读数据区,则不用该参数;

(e)第六行的TIME是取系统当前日期和时间,整行的意思是把系统当前日期

和时间赋给一个14位长0位

小数的数值型变量DATTME中,由于系统当前的日期和时间是按照

“hhmmssMMDDYYYY”存放,所

以甘好也是14位;

(f)第七行意思是把变量DATTME右移给字段CURDAT,所以CURDAT的值甘好是

日期“MMDDYYYY”;

(g)第八行意思是把变量DATTME左移给字段CURTME,所以CURTME的值甘好是

日期“hhmmss”;

(h)第九行的OUT表示对数据区进行写操作,记住Factor处是我们程序开始

定义的大字段#DTA;

(i)第十行的UNLCK表示解锁,因为我们在第五行使用了参数*LOCK;

(j)第十一行表示程序结束。

===================================================

=========

按F3退出编辑器并保存,进行编译,生成的程序名假设为DTAARAR,

那么在命令行CALLDTAARAR,那么数据区已经成功更改了,

使用命令DSPDTAARAMYDTAARA就可以查看数据区内容了。

5

写给刚接触RPG的朋友---如何编写RPG程序(2)

续《写给刚接触RPG的朋友---如何编写RPG程序(1)》

【上文摘要】

RPG一般用来做什么吧,举例说:

1.整个RPG程序不包含任何外部程序,只是做些简单的数学运算,或者对数

据区、DATAQ等非文件目标进行操作,这属于相对最简单的情况;

程序对物理文件或者逻辑文件进行读、写、更新、删除操作;

程序结合物理文件或逻辑文件、以及显示文件进行操作,这属于比较复

杂的情况;程序结合物理文件或逻辑文件、显示文件、以及ICF文件(即通

讯文件)进行操作,这种情况也比较复杂。

当然,以上的情况只是平时使用的归纳,你也可以根据自己的实际需要结合各

种情况,此处不再深入探讨。

……

上文中讲到了第1点,现在讲解第2点。

【注】假设以下源码文件存放的路径是:库MYLIB、源物理文件MYSRCPF

==============================================================

2.(1)建立物理文件:

使用WRKMBRPDMFILE(MYLIB/MYSRCPF)进入源码存储处,按F6,进入“Start

SourceEntryUtility(STRSEU)”画面,“Sourcemember”为源码文件名,此处

是我们要建立的物理文件名,假设为MYPF,“Sourcetype”为文件类型,这里我

们输入PF表示该文件是物理文件源码,按确认键,进入编辑器。

代码如下:

.....A..........++++++RLen++TDpB......Functions+++++++++++++++

+

++

***************Beginningofdata

*************************************

ARFMYPF

APFFLD14ATEXT('FIELD1')

ACOLHDG('FIELD1')

APFFLD25P0TEXT('FIELD2')

ACOLHDG('FIELD2')

******************Endofdata

****************************************【注】

(a)第一行的R处在T处,表示Record,即声明FMYPF是该物理文件的记录名;

(b)第二行中PFFLD1位于Name处,T处为空,表示这是字段名。该句定义一

个叫PFFLD1的字段,长度为4,字段属性是A,表示字符型。TEXT('FIELD1')给字

段做注解,

COLHDG('FIELD1')给字段指定显示时候的列表题;

(c)第三行定义一个叫PFFLD2的字段,长度为5,字段属性是P,表示数值

型,0表示小数位是0位。

保存文件,编译生成目标文件MYPF。

6

(2)建立逻辑文件:

建立步骤和物理文件一样,不过值得注意的是,“Sourcetype”必须为LF,

表示该文件是逻辑文

件,这里假设文件名为MYLF,代码如下:

.....A..........++++++.Len++TDpB......Functions+++++++++++++++

+

++

***************Beginningofdata

*************************************

ARFMYPFPFILE(MYPF)

AKPFFLD1******************Endofdata

****************************************

【注】

(a)第一行中R依然表示FMYPF是记录名,一般和物理文件的一样;

PFILE(MYPF)是声明物理文件名。

(b)第二行中K的位置也是处于T处,表示该处字段PFFLD1是逻辑文件的键

值。

(3)建立对物理文件或者逻辑文件进行简单操作的RPG程序:

建立步骤和物理文件一样,不过值得注意的是,“Sourcetype”必须为RPG,

表示该文件是RPG

源程序文件,这里假设文件名为MYRPG,代码如下:

.....FFilenameIPEAF........L..I........Device+......KExit++Entry+A..

..U***************Beginningofdata

*************************************

FMYPFOEDISK

FMYLFIFEKDISK.....F......................Ext-

record........................RcdnbrKOptionEntry+++....

FFMYPFKRENAMEFMYLF

Keywords

RENAME(PMYPF:PMYLF)

.....CL0N01N02N03Factor1+++OpcdeFactor2+++ResultLenDHHiLoEqComments+

+++

CMOVE'RCD1'PFFLD1

CZ-ADD1PFFLD2

CWRITEFMYPF

C*LOVALSETLLFMYLF

CREADFMYLF90

C*IN90IFEQ'0'

CPFFLD1DSPLY

CPFFLD2DSPLY

CENDIF

CSETONLR

******************Endofdata

7

****************************************【注】

(a)第一行MYPF是我们上面建立的物理文件名,记住,不是记录名FMYPF,别

搞错了;

O位于IP的I处,表示该文件是只允许写入;

E位于F处,表示该文件是外部文件;

DISK位于Device处,表示该文件是磁盘文件;

(b)第二行MYLF是我们上面建立的逻辑文件名,记住,不是记录名,别搞错

了;

I位于IP的I处,表示该文件是只允许读取;

后面的F表示该文件是全过程文件,记住一般都要写这个F的就行了;

E位于F处,表示该文件是外部文件;

K位于I..L的L处,表示该文件有键值;

DISK位于Device处,表示该文件是磁盘文件;

(c)第三行的FMYPF位于Ext-record处,是逻辑文件的记录名;

“KRENAMEFMYLF”其实由三部分组成:“K”、“RENAME”和“FMYLF”。

"K"表示该句和上一行是连续的,即对上一行的补充,“RENAME”表示重命

名,“FMYLF”是任意指定的。这行的意思就是把逻辑文件MYLF的记录名FMYPF重

命名为FMYLF,因为它原本的记录名和物理文件相同,所以必须重命名。

(d)第四行中的MOVE表示右移,该行意思是把常量'RCD1'右移给字段PFFLD1;

(e)第五行中的Z-ADD表示对变量置0,再赋值,该行意思是把常量1赋给字段

PFFLD2;(f)第六行中的WRITE表示写一笔记录,后面的FMYPF是物理文件记录

名,记住,不是物理文件名,别搞错了,该行意思是把PFFLD1、PFFLD2组成的记

录写入物理文件;(g)第七行中的SETLL表示给文件设置低界,后面紧跟着的

FMYLF是逻辑文件记录名,这个是我们重命名后的名字,*LOVAL是系统常量,表示

最小值,该行的意思是把文件指针指向文件头;(h)第八行中的READ表示读一笔

记录,后面的FMYLF是逻辑文件记录名,这个是我们重命名后的名字,

90位于Eq处,表示指示器,该行的意思是读逻辑文件的一笔记录,读到的话

指示器置为'0',否则,置为'1';

(i)第九行的IFEQ表示如果等于的意思,该句的意思就是如果指示器90等于

„0?,即读到记录;(j)第十行中的DSPLY用来显示字段变量,该行的意思是显示

字段变量PFFLD1的值;(k)第十一行中的ENDIF和前面的IF匹配,这是必须的;

(l)第十二行中的SETON用来把指示器的状态改为'1',该句意思是把指示器

LR置为„1?。

到此为止,你应该懂得如何往文件读写数据。

写给刚接触RPG的朋友---如何编写RPG程序(2)【续】

续《写给刚接触RPG的朋友---如何编写RPG程序(2)》

上文中,只举例说明了如何对文件进行读写操作,下面再举一例子讲解如何对

文件进行更新和删除:

(1)物理文件MYPF结构如下:

.....A..........++++++RLen++TDpB......Functions+++++++++++++++

+

++

8

***************Beginningofdata

*************************************

ARFMYPF

APFFLD14ATEXT('FIELD1')

ACOLHDG('FIELD1')

APFFLD25P0TEXT('FIELD2')

ACOLHDG('FIELD2')******************Endofdata

****************************************

(2)逻辑文件MYLF结构如下:

.....A..........++++++.Len++TDpB......Functions+++++++++++++++

+++

***************Beginningofdata

*************************************

ARFMYPFPFILE(MYPF)

AKPFFLD1

******************Endofdata

****************************************

(3)假如文件有两笔记录如下:

PFFLD1PFFLD2

================

RCD11

RCD22

================

(4)现需要把第一笔记录删除,把第二笔记录更新为"RCD23",代码如下:

.....FFilenameIPEAF........L..I........Device+......KExit++Entry+A..

..U

***************Beginningofdata

*************************************

FMYLFUFEKDISK

FFMYPFKRENAMEFMYLF

C*

.....CL0N01N02N03Factor1+++OpcdeFactor2+++ResultLenDHHiLoEqComments+

+++

C'RCD1'SETLLFMYLF

C'RCD1'READEFMYLF90

C*IN90IFEQ'0'

CDELETFMYLF

CENDIF

C*

C'RCD2'SETLLFMYLF

C'RCD2'READEFMYLF90

C*IN90IFEQ'0'

CZ-ADD3PFFLD2

CUPDATFMYLF

CENDIF

C*

CSETONLR

9

******************Endofdata

****************************************

【注】

(a)第一行中的MYLF是逻辑文件名,

U位于I处,表示该文件只作更新操作,

F处于P处,表示该文件是全过程文件,一般都写F,

E位于F处,表示该文件是个外部文件,

K位于I处,表示该文件有键值,

DISK位于Device处,表示该文件是磁盘文件。

(注:该句声明文件MYLF只允许做更新操作,如果同时还要对其进行添加记

录,那么只要在同行A处写个A就可以了,即

.....FFilenameIPEAF........L..I........Device+......KExit++Entry+A..

..U

***************Beginningofdata

*************************************

FMYLFUFEKDISKA

);

(b)第二行意思是把逻辑文件记录名FMYPF改为FMYLF,这里可改可不改。如果

程序里有文件出现同名的记录名,那么必须通过这种方法把其他文件记录名进行重

命名;

(c)第三行把指针定位到文件开头处;

(d)第四行中的READE表示读等于键值的记录。该句的意思是用值”RCD1“去

读逻辑文件,注意,逻辑文件的键值是字段PFFLD1,所以执行到该句时,程序会

拿这个值去找逻辑文件中字段PFFLD1值为'RCD1'所在的记录,找到的话指示器置

为'0',反之,置为'1';

(e)第六行的DELET是删除记录,该句意思是删除当前读到的记录;

(f)第十三行的UPDAT是更新记录,该句的意思是更新当前的记录。

===================================================

=========

到此为止,你对物理文件、逻辑文件的操作应该是基本掌握了~

写给刚接触RPG的朋友---如何编写RPG程序(3)

续《写给刚接触RPG的朋友---如何编写RPG程序(2)》

【上文摘要】

RPG一般用来做什么吧,举例说:

1.整个RPG程序不包含任何外部程序,只是做些简单的数学运算,或者对数

据区、DATAQ等非文件目标进行操作,这属于相对最简单的情况;

程序对物理文件或者逻辑文件进行读、写、更新、删除操作;

程序结合物理文件或逻辑文件、以及显示文件进行操作,这属于比较复

杂的情况;程序结合物理文件或逻辑文件、显示文件、以及ICF文件(即通

讯文件)进行操作,这种情况也比较复杂。

当然,以上的情况只是平时使用的归纳,你也可以根据自己的实际需要结合各

种情况,此处不再

10

深入探讨。

……

上文中讲到了第2点,现在讲解第3点。

【注】假设以下源码文件存放的路径是:库MYLIB、源物理文件MYSRCPF

===================================================

===========

3.(1)物理文件MYPF和逻辑文件MYLF使用2中建立的就可以了,假如文件物

理文件里有以下

记录:

=================

PFFLD1PFFLD2

=================

RCD11

RCD22

RCD33

=================

(2)建立显示文件:

建立步骤和物理文件一样,不过值得注意的是,“Sourcetype”必须为

DSPF,表示该文件是显

示文件,这里假设文件名为MYDSPF,代码如下:

.....++++++RLen++TDpBLinPosFunctions+++++++++++

+++++++

***************Beginningofdata

*************************************

ADSPSIZ(2480*DS3)

ACA12(12'CANCEL')

ARRCDNM

AFLD14O426DSPATR(UL)

ADSPATR(HI)

A412'PFFLD1:'

A512'PFFLD2:'

AFLD25S0O526******************Endofdata

****************************************

【注】

(a)第一行指定显示大小,一般都是这个;

(b)第二行中CAxx表示程序里要可用F12按键,'CANCEL'表示注释;

(c)第三行R跟物理文件一样,表明后面Name对应的RCDNM是一个记录名,

在显示文件里

指一个显示画面;

(d)第四行FLD1在Name处,这里指字段名,长度是4,O位于“TDpB”的B

处,表示该字段

只允许做输出用,接着的4位于Lin处,表示屏幕第4行,接下来的26位于

Pos处,表示屏幕

第26列。到此为止,表明在屏幕第4行第26列的位置输入字段FLD1。

后面的DSPATR是显示文件关键字,是用来指定字段显示属性的,后面的UL是

单词UnderLine

11

的缩写,表明该字段带下划线,HI是单词Highintensity的缩写,表明该字

段高亮显示;

(e)第五行意思是在屏幕第4行第12列输出字符串“PFFLD1”;

保存文件,编译生成目标文件MYDSPF。

(3)建立对物理文件或者逻辑文件以及显示文件进行简单操作的RPG程序:

.....FFilenameIPEAF........L..I........Device+......KExit++Entry+A..

..U***************Beginningofdata

*************************************

FMYLFIFEKDISK

FFMYPFKRENAMEFMYLF

FMYDSPFCFEWORKSTN

C*.....CL0N01N02N03Factor1+++OpcdeFactor2+++ResultLenDHHiLoEqCommen

ts+

+++

C*IN12DOWEQ'0'

EXFMTRCDNMC

C12LEAVE

CFLD1IFEQ*BLANKS

ITERC

CENDIF

CFLD1SETLLFMYLF

CFLD1READEFMYLF90

C*IN90IFEQ'0'

CZ-ADDPFFLD2FLD2

CENDIF

CENDDO

CSETONLR

******************Endofdata

****************************************

【注】

(a)第一行声明逻辑文件MYLF为只读的;

(b)第二行是第一行的延续,把逻辑文件的记录名FMYPF重命名为FMYLF;

(c)第三行中的MYDSPF是我们上面建立的显示文件名,

C位于I处,表明允许对该文件进行写入/读出操作,

F位于P处,表明该文件是全过程文件,一般都这么写,

E位于F处,表明该文件是外部文件,

WORKSTN位于Device处,表明该文件是显示文件或报表文件,

这行和第一行声明很相似。

(d)第四行中的*IN12表示指示器12,这里为什么只用这个指示器,而不用别

的呢,看看上面

的显示文件MYDSPF的第二行吧,还记得吗,我们通过语句“CA12(12

'CANCEL')”声明了程

序运行时要用到按键F12,这是提供给用户进行操作用的。该句的意思是当按

键没被按下时,进

12

入循环;

(e)第五行中的EXFMT是用来显示一个画面,并且停留着等待用户做出操作,

该句意思是显示画面RCDNM,并且程序停留在该处不继续执行;

(f)第六行的LEAVE表示退出循环,12位于N01的01处就是按键F12的状

态,当用户按下F12,那么指示器就变为„1?,这时就执行该句,反之,不执行;

(g)第七行判断画面中的字段FLD1是否为空;

(h)第八行的ITER表示跳到循环的开始处;

(i)第七、八、九行的意思是,如果FLD1为空的话,那么跳到循环开始处执

行;(j)第十行是把指针设置到文件头;

(k)第十一行是读逻辑文件中字段PFFLD1的值等于FLD1的记录;

(l)第十二行表示读到记录;

(m)第十三行表示把逻辑文件中读到的记录的PFFLD2字段值赋给显示画面中

的字段FLD2;

===================================================

=========

到此为止,你对显示文件应该有了一点点的了解~

由于显示文件操作起来相对复杂,接下来的功夫就靠各位刚入门的朋友多参考

别人写的例子,运行运行,这样体会会更深,收获也会更大的~

写给刚接触RPG的朋友---如何编写RPG程序(4)

续《写给刚接触RPG的朋友---如何编写RPG程序(3)》

【上文摘要】

RPG一般用来做什么吧,举例说:

1.整个RPG程序不包含任何外部程序,只是做些简单的数学运算,或者对数

据区、DATAQ等非文件目标进行操作,这属于相对最简单的情况;

程序对物理文件或者逻辑文件进行读、写、更新、删除操作;

程序结合物理文件或逻辑文件、以及显示文件进行操作,这属于比较复

杂的情况;程序结合物理文件或逻辑文件、显示文件、以及ICF文件(即通

讯文件)进行操作,这种情况也比较复杂。

当然,以上的情况只是平时使用的归纳,你也可以根据自己的实际需要结合各

种情况,此处不再深入探讨。

……

上文中讲到了第3点,现在讲解第4点。

===================================================

=======

我对SNA通讯还不是很熟,平时也用得少,就在此大概说说吧。

首先得建立ICF文件,一般都是很简单的,主要含有一个用来传送数据的字

段,还有DETACH、EOS等关键字。在程序外部需要建立并配置LIN、CTL、DEV,要

求的参数比较多。通讯原理都差不多,这是发送端:

1.用DEV名ACQ通讯文件(即ICF文件);

13

存放数据的字段对应的记录名,即写数据;

3.写DETACH、EOS结束会话。

接受端也差不多这样,即第二点的WRITE改为READ,即读数据。

IBM的SNA协议通讯现在用得越来越少了,现在主流是用TCP/IP,用C写,

SOCKET方便,也不用配置什么参数,一般找些程序套用一下就行,嘿嘿。

通讯方面,我实在不熟,望熟悉的朋友可以举举例子供大家分享一下~

===================================================

=======

刚入门的朋友可以先不要急于学这方面的知识,如果真的要学,建议好好学一

下C吧。一般同主机通讯就用数据队列(DATAQ)存放数据包就可以了,关于这方

面,接下来我会通过举例说明的了。

14

本文发布于:2022-11-22 17:23:51,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/503.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:component
下一篇:rational
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图