数据域(DATA AREA)的使用

在AS400中,数据域是类型为*DTAARA的目标,永久存储在硬盘上面,由用户创建和删除,也可以视为单一字段。

从操作系统的角度讲,当我们发出:CRTDTAARA DTAARA(TOTDTA) TYPE(*DEC) LEN(20)这条语句的之后,系统就开辟一个占用20个字符的连续空间;

从RPGLE程序的角度看,数据域就似一个缓冲池,我们可以用来临时存储程序中需要使用到的数据,下面是实例。

实例1:

     FTEST02    CF   E             WORKSTN
     DDST              DS                  DTAARA(DTARA)
     DONE                             2A
     DTWO                             6A
     DTHREE                           2A
     DFOUR                            6A
     DFIVE                            3A
     DSIX                             1A
     DSUM              S              8S 0 INZ(0)
     C*--------------
     C* 程序控制
     C*--------------
     C                   EXSR      @MAIN
     C                   EXSR      @EXIT
     C*----------
     C* @MAIN
     C*----------
     C     @MAIN         BEGSR
     C                   EXFMT     DTST
     C                   EVAL      DST=FLD001
     C                   EVAL      SUM=%INT(ONE)+%INT(TWO)+%INT(THREE)
     C                   EVAL      SUM=SUM+%INT(FOUR)+%INT(FIVE)+%INT(SIX)
     C                   EVAL      FLD002=%CHAR(SUM)
     C                   EVAL      FLD003=%SUBST(%CHAR(SUM):2:5)
     C                   EVAL      FLD004=%CHAR(%SCAN('0':%CHAR(SUM):1))
     C                   EVAL      FLD005=%CHAR(%SCAN('1':%CHAR(SUM):1))
     C                   EXFMT     DTST
     C                   ENDSR
     C*---------
     C* @EXIT
     C*---------
     C     @EXIT         BEGSR
     C                   EVAL      *INLR='1'
     C                   RETURN
     C                   ENDSR

这里定义了一个数据结构DST,此DST对应了一个数据域;数据域中连续存储的字段,按照数据结构里面的字段分拆开来,

即可分配给这些字段值(如果数据域中存储有数据的话)。

在下面的操作:EVAL      DST=FLD001(这里FLD001是DSPF文件的一个字段,接受用户输入数字),

将输入的字符串数值直接赋值给连续的存储空间(数据域);

每一段对应着数据结构里面的每一个数据(当然得是可以转换的数值型字符串),

应该说数据结构里面的每个数据对应去数据域中截取属于自己的那部分(便于理解才这么描述);

之后数据结构里面的字段就有了值,然后才可以进行下面的计算。

实例2:

 DYT               S             20A 0             
 C     *DTAARA       DEFINE                  YT   
 C     *LOCK         IN        YT                 
 C                   EVAL      YT=1001           
 C                   OUT       YT                 
 C                   EVAL      *INLR = '1'        
这是另外一种使用方法;其中独立变量的名称一定要与数据域的名称相同。

第二行最后的YT是已经定义的数据域,通过媒介(独立变量YT)我们可以读取(IN)里面的值,和向里面写(OUT)数据(如第5行)。

下面是编译代码之后,调用程序,我们看到数据域YT中有了值:

数据域(DATA AREA)的使用_第1张图片

你可能感兴趣的:(数据结构,c,存储,DST)