在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中有了值: