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



上文中,只举例说明了如何进行简单的数学运算,下面再举一例子讲解如何操作数据区(DATAARA)和数据队列(DTAQ)。



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



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

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



在系统命令行输入CRTDTAARA,按F4,进入“Create Data Area (CRTDTAARA)”画面,参数如下:

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

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

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

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

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

                *DEC数值型,

                *CHAR字符型,

                *LGL逻辑型,

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

                这里我们选择*CHAR;

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

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

(f) Initial value:       数据区初始值,可填可不填,我们这里选择不填,在程序里进行更改;

(g) Text:               注释。



整个命令请参考如下:




CRTDTAARA DTAARA(MYLIB/MYDTAARA) TYPE(*CHAR) LEN(20)


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



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



 Columns . . . :    1  71            Edit                        MYLIB/MYFILE

 SEU==>                                                                 DTAARAR

 FMT DS .....IDsname....NODsExt-file++.............OccrLen+....................

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

0001.00      I#DTA            DS                                      20                   

FMT J     ......I....................................PFromTo++DF i e l d+L1M1FrPlMnZr.

0002.00      I                                            1       8 CURDAT            

0003.00      I                                          11     16 CURTME            

FMT C     .....CL0N01N02N03Factor1+++OpcdeFactor2+++ResultLenDHHiLoEq

0004.00      C                       *NAMVAR    DEFN MYDTAARA  #DTA                        

0005.00      C                       *LOCK        IN      #DTA                                  

0006.00      C                                         TIME   DATTME                 140                  

0007.00      C                                         MOVE DATTME       CURDAT                      

0008.00      C                                         MOVELDATTME      CURTME                      

0009.00      C                                         OUT    #DTA                                  

0010.00      C                                         UNLCK#DTA                                  

0011.00      C                                         SETON                                             LR               

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



【注】

(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,

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

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



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



到此为止,你已经基本懂得如何对数据区进行操作了!




轉自:新儒as/400家園

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