【上文摘要】
RPG一般用来做什么吧,举例说:
1. 整个RPG程序不包含任何外部程序,只是做些简单的数学运算,或者对数据区、DATAQ等非文件目标进行操作,这属于相对最简单的情况;
2. RPG程序对物理文件或者逻辑文件进行读、写、更新、删除操作;
3. RPG程序结合物理文件或逻辑文件、以及显示文件进行操作,这属于比较复杂的情况;
4. RPG程序结合物理文件或逻辑文件、显示文件、以及ICF文件(即通讯文件)进行操作,这种情况也比较复杂。
当然,以上的情况只是平时使用的归纳,你也可以根据自己的实际需要结合各种情况,此处不再深入探讨。
……
上文中讲到了第1点,现在讲解第2点。
【注】假设以下源码文件存放的路径是:库MYLIB、源物理文件MYSRCPF
==============================================================
2. (1)建立物理文件:
使用WRKMBRPDM FILE(MYLIB/MYSRCPF)进入源码存储处,按F6,进入“Start Source Entry Utility (STRSEU)”画面,“Source member”为源码文件名,此处是我们要建立的物理文件名,假设为MYPF,“Source type”为文件类型,这里我们输入PF表示该文件是物理文件源码,按确认键,进入编辑器。
代码如下:
.....A..........T.Name++++++RLen++TDpB......Functions++++++++++++++++++
*************** Beginning of data *************************************
A R FMYPF
A PFFLD1 4A TEXT('FIELD1')
A COLHDG('FIELD1')
A PFFLD2 5P 0 TEXT('FIELD2')
A COLHDG('FIELD2')
****************** End of data ****************************************
【注】
(a) 第一行的R处在T处,表示Record,即声明FMYPF是该物理文件的记录名;
(b) 第二行中PFFLD1位于Name处,T处为空,表示这是字段名。该句定义一个叫PFFLD1的字段,长度为4,字段属性是A,表示字符型。TEXT('FIELD1')给字段做注解,COLHDG('FIELD1')给字段指定显示时候的列表题;
(c) 第三行定义一个叫PFFLD2的字段,长度为5,字段属性是P,表示数值型,0表示小数位是0位。
保存文件,编译生成目标文件MYPF。
(2)建立逻辑文件:
建立步骤和物理文件一样,不过值得注意的是,“Source type”必须为LF,表示该文件是逻辑文件,这里假设文件名为MYLF,代码如下:
.....A..........T.Name++++++.Len++TDpB......Functions++++++++++++++++++
*************** Beginning of data *************************************
A R FMYPF PFILE(MYPF)
A K PFFLD1
****************** End of data ****************************************
【注】
(a)第一行中R依然表示FMYPF是记录名,一般和物理文件的一样;
PFILE(MYPF)是声明物理文件名。
(b)第二行中K的位置也是处于T处,表示该处字段PFFLD1是逻辑文件的键值。
(3)建立对物理文件或者逻辑文件进行简单操作的RPG程序:
建立步骤和物理文件一样,不过值得注意的是,“Source type”必须为RPG,表示该文件是RPG源程序文件,这里假设文件名为MYRPG,代码如下:
.....FFilenameIPEAF........L..I........Device+......KExit++Entry+A....U
*************** Beginning of data *************************************
FMYPF O E DISK
FMYLF IF E K DISK
.....F......................Ext-record........................RcdnbrKOptionEntry+++....
F FMYPF KRENAMEFMYLF
.....CL0N01N02N03Factor1+++OpcdeFactor2+++ResultLenDHHiLoEqComments++++
C MOVE 'RCD1' PFFLD1
C Z-ADD1 PFFLD2
C WRITEFMYPF
C *LOVAL SETLLFMYLF
C READ FMYLF 90
C *IN90 IFEQ '0'
C PFFLD1 DSPLY
C PFFLD2 DSPLY
C ENDIF
C SETON LR
****************** End of data ****************************************
【注】
(a) 第一行MYPF是我们上面建立的物理文件名,记住,不是记录名,别搞错了;
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’。
到此为止,你应该懂得如何往文件读写数据。
轉自:新儒as/400家園