免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-02 21:14 |只看该作者 |倒序浏览
续《写给刚接触

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’



  





  

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

  

写给刚接触

RPG

的朋友

---

如何编写

RPG

程序(

2





【续】



  

续《写给刚接触

RPG

的朋友

---

如何编写

RPG

程序(

2

)》

  

  

上文中,

只举例说明了如何对文件进行读写操作,

下面再举一例子讲解如何对文件进行更新和删

除:

  

(1)

物理文件

MYPF

结构如下:

  

.....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  

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



(2)

逻辑文件

MYLF

结构如下:

  

.....A..........T.Name++++++.Len++TDpB......Functions++++++++++++++++++

*************** Beginning of data *************************************

     

A         

R FMYPF                                      

PFILE(MYPF)         



     

A         

K PFFLD1                              

  

****************** End of data ****************************************  

(3)

假如文件有两笔记录如下:



PFFLD1

  

  

  

  

PFFLD2



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



RCD1

  

  

  

  

  

  

  

1



RCD2

  

  

  

  

  

  

  

2



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

  

  

(4)

现需要把第一笔记录删除,把第二笔记录更新为

"RCD2

  

  

  

  

  

  

  

3"

,代码如下:

  

  

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

*************** Beginning of data *************************************

     

FMYLF      

UF   

E           

K      

DISK                           

  

     

F                     

FMYPF                              

KRENAMEFMYLF      



     

C*                                                               

  

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

     

C                     

'RCD1'         

SETLLFMYLF                                 

  

     

C                     

'RCD1'         

READEFMYLF                                   

90            



     

C                     

*IN90         

IFEQ '0'                                    



     

C                                         

DELETFMYLF                                 



     

C                                         

ENDIF                                       



     

C*                                                               

  

     

C                     

'RCD2'         

SETLLFMYLF                                 

  

     

C                     

'RCD2'         

READEFMYLF                                   

90            



     

C                     

*IN90         

IFEQ '0'                                    

  

     

C                                       

Z-ADD3                 

PFFLD2                       



     

C                                       

UPDATFMYLF                                 



     

C                                       

ENDIF                                       



     

C*                                                               

  

     

C                                       

SETON                                             

LR               



****************** End of data ****************************************  









风云子--

JDE

开发--写给刚接触

RPG

的朋友

9








13  

【注】

  

(a)

第一行中的

MYLF

是逻辑文件名,



  

U

位于

I

处,表示该文件只作更新操作,

  

  

F

处于

P

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

F





  

E

位于

F

处,表示该文件是个外部文件,



  

K

位于

I

处,表示该文件有键值,

  

  

DISK

位于

Device

处,表示该文件是磁盘文件。

  

(注:该句声明文件

MYLF

只允许做更新操作,如果同时还要对其进行添加记录,那么只要在

同行

A

处写个

A

就可以了,即

  

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



*************** Beginning of data  

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

  



FMYLF  

  

UF  

E  

  

  

K  

  

DISK  

  

  

  

  

  

  

  

  

  

  

A  

  

  

  

  

  

  

  

  

  

  

  

  





);

  

  

(b)

第二行意思是把逻辑文件记录名

FMYPF

改为

FMYLF

,这里可改可不改。如果程序里有文件

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

  

  

(c)

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

  

(d)

第四行中的

READE

表示读等于键值的记录。该句的意思是用值

”RCD1“

去读逻辑文件,注

意,

逻辑文件的键值是字段

PFFLD1



所以执行到该句时,

程序会拿这个值去找逻辑文件中字段

PFFLD1

值为

'RCD1'

所在的记录,找到的话指示器置为

'0'

,反之,置为

'1'



  

  

(e)

第六行的

DELET

是删除记录,该句意思是删除当前读到的记录;



(f)

第十三行的

UPDAT

是更新记录,该句的意思是更新当前的记录。

  

  

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

==========

到此为止,你对物理文件、逻辑文件的操作应该是基本掌握了...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP