免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3187 | 回复: 3
打印 上一主题 下一主题

5.[转]写给刚接触RPG的朋友 --- 如何编写RPG程序(2) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-23 13:04 |只看该作者 |倒序浏览
RPG一般用来做什么吧,举例说:
        1. 整个RPG程序不包含任何外部程序,只是做些简单的数学运算,或者对数据区、DATAQ等非文件目标进行操作,这属于相对最简单的情况;
        2. RPG程序对物理文件或者逻辑文件进行读、写、更新、删除操作;
        3. RPG程序结合物理文件或逻辑文件、以及显示文件进行操作,这属于比较复杂的情况;
        4. RPG程序结合物理文件或逻辑文件、显示文件、以及ICF文件(即通讯文件)进行操作,这种情况也比较复杂。
        当然,以上的情况只是平时使用的归纳,你也可以根据自己的实际需要结合各种情况,此处不再深入探讨。
……
上文中讲到了第1点,现在讲解第2点。
<注>:假设以下源码文件存放的路径是:库MYLIB、源物理文件MYSRCPF
        使用WRKMBRPDM FILE(MYLIB/MYSRCPF)进入源码存储处,按F6,进入“Start Source Entry Utility (STRSEU)”画面,“Source member”为源码文件名,此处是我们要建立的物理文件名,假设为MYPF,“Source type”为文件类型,这里我们输入PF表示该文件是物理文件源码,按确认键,进入编辑器。
代码如下:

        *************** Beginning of data *************************************
0001.00      A         R FMYPF                                                
0002.00      A            PFFLD1         4A         TEXT('FIELD1')            
0003.00      A                                              COLHDG('FIELD1')           
0004.00      A            PFFLD2         5P 0       TEXT('FIELD2')            
0005.00      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,代码如下:

        *************** Beginning of data *************************************
0001.00      A          R FMYPF                     PFILE(DSCHIWUXN/MYPF01)   
0002.00      A          K PFFLD1                                               
        ****************** End of data ****************************************

<注>:
        (a)第一行中R依然表示FMYPF是记录名,一般和物理文件的一样;PFILE(MYPF)是声明物理文件名。
        (b)第二行中K的位置也是处于T处,表示该处字段PFFLD1是逻辑文件的键值。

      (3)建立对物理文件或者逻辑文件进行简单操作的RPG程序:
建立步骤和物理文件一样,不过值得注意的是,“Source type”必须为RPG,表示该文件是RPG源程序文件,这里假设文件名为MYRPG,代码如下:

        *************** Beginning of data *************************************
0001.00      FMYPF01  O   E                     DISK                           
0002.00      FMYLF01   IF  E           K        DISK                           
0003.00      F                    FMYPF                             KRENAMEFMYLF      
0004.00      C                           MOVE 'RCD1'    PFFLD1                       
0005.00      C                           Z-ADD1            PFFLD2                       
0008.00      C                           WRITEFMYPF                                 
0009.00      C           *LOVAL    SETLLFMYLF                                 
0010.00      C                           READ FMYLF                    90            
0011.00      C           *IN90      IFEQ '0'                                    
0012.00      C           PFFLD1    DSPLY                                       
0013.00      C           PFFLD2    DSPLY                                       
0014.00      C                           ENDIF                                       
0015.00      C                           SETON                     LR               
0016.00      C                           RETRN                                       
        ****************** End of data ****************************************

<注:因文件同名,故命名为MYRPGPFLF>
<注>:
       (a) 第一行MYPF是我们上面建立的物理文件名,记住,不是记录名,别搞错了;O位于IP的I处,表示该文件是只允许写入;E位于F处,表示该文件是外部文件;DISK位于Device处,表示该文件是磁盘文件;
       (b) 第二行MYLF是我们上面建立的逻辑文件名,记住,不是记录名,别搞错了;I位于IP的I处,表示该文件是只允许读取;后面的F表示该文件是全过程文件,记住一般都要写这个F的就行了;E位于F处,表示该文件是外部文件;K位于L..I的I处,表示该文件有键值;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,PFFLD2的值;
       (k) 第十二行中的ENDIF和前面的IF匹配,这是必须的;
       (l) 第十三行中的SETON用来把指示器的状态改为'1',该句意思是把指示器LR置为‘1’。

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

论坛徽章:
0
2 [报告]
发表于 2008-05-23 17:11 |只看该作者
楼主,我输入你的代码compile时有如下错误...请帮忙看看.

                          M e s s a g e   S u m m a r y                        
* QRG2071 Severity:  30   Number:    1                                       
           Message . . . . :   The RENAME option is invalid. No Record-Format  
             names associated with Externally-Described file.                  
* QRG2120 Severity:  40   Number:    2                                       
           Message . . . . :   External description not found for file         
             specified as externally described. File ignored.                  
* QRG5132 Severity:  30   Number:    3                                       
           Message . . . . :   Factor 2 entry is not the name of a file or a   
             record format.                                                   
* QRG7030 Severity:  30   Number:    2                                       
           Message . . . . :   The Field or indicator is not defined.

论坛徽章:
0
3 [报告]
发表于 2008-05-23 18:29 |只看该作者
先把40的错误解决掉

论坛徽章:
0
4 [报告]
发表于 2008-05-26 08:36 |只看该作者
尚未入门,就40错误而言,请教如何产生External description for file         
             specified as externally described.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP