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

【上文摘要】

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家園

狼翔月影 發表在 痞客邦 PIXNET 留言(0) 人氣()