AS400开发入门-By adan

发布时间 : 星期三 文章AS400开发入门-By adan更新完毕开始阅读

DOW (Do While)

EVAL (Evaluate expression) IF (If)

RETURN (Return to Caller) WHEN (When True Then Select)

DOU

例子:

C

C C

DOU ?? ENDDO

*INKC

C* 直到F3被按下,循环中的语句至少被执行一次 C C C C C C

DOU *IN10 OR (FIELD2 > FIELD3) ?? ENDDO DOU ?? ENDDO

X > %ELEM(ARRAY)

DOW

例子: C

C C

DOW ?? ENDDO

A<=5 AND B+C=0

EVAL

例子:

C EVAL ARR(*)=FIELD2*FIELD3 C* 数组ARR的所有元素都被赋予同样的值

C EVAL RES=(FIELD1<10)+ *IN10 +(FIELD2>=5) C* 逻辑判断的值为字符形,因此RES的值就是三个逻辑判断的结果的连接,‘010’

RETURN

例子:

D*无参数返回 D RETNONE

?????? P RETNONE D RETNONE ??

61676237.doc – 第 25 页 共 39 页

PR B PI

C P RETNONE RETURN E

D*返回一个参数 D RETFIELD D PARM ?????? P RETFIELD D RETFIELD D PARM D FLD ??

C P RETFIELD D* 返回数组 D RETARRAY ?????? P RETARRAY

PR 5P 2 5I 2 B

PI 5P 2 5I 2

S 12S 1 INZ(13.8)

RETURN 7(RETURN FLD*3 / RETURN FLD) E

PR B

D DIM(3)DATFMT(*YMD/)

D RETARRAY PI D DIM(3)

D SMALLARR S DIM(2)DATFMT(*ISO) D BIGARR S DIM(4)DATFMT(*USA)

C* 如果使用下面的方法返回参数,那么接口数组中所有元素都含有相同的值 C RETURN D’1995-06-27’

C*如果使用比接口定义的数组元素个数少的数组,那么接口数组的第三个元素将 C*被赋予默认值

C RETURN SMALLARR

C*如果使用比接口定义的数组元素个数多的数组,那么多余的数组元素将被忽略 C RETURN BIGARR P RETARRAY E

WHEN

例子:

C C

C C C C

SELECT WHEN

*INKA

?????? WHEN NOT(*IN10) AND (DAY=’FRIDAY’) ??????

WHEN %SUB(A:4:3)=’ABC’ ?????? OTHER

C C

C C ?????? ENDSL

61676237.doc – 第 26 页 共 39 页

3.内嵌式函数及新增、改变的操作 内嵌式函数

?S(numeric expression)返回表达式的绝对值 -DR(variable name)返回表达式的地址

%CHAR(graphic,date,time,timestamp expression)返回字符类型的值 TC(numeric expression(:digits:decimal position)按照参数指定的数据长度和精度返回返回P类型的值 Tcpos(numeric expression)按照参数指定的小数位返回P类型的数值

%ELEM(array,table,multiple occurrence data structure name)返回元素个数

%EOF(filename)当最近一次input操作或向一个SUBFILE写操作遇到文件头或文件尾,就返回‘1’,否则返回‘0’

%EQUAL(filename)如果最近一次SETLL(for a particular file ,if specified)或者LOOKUP遇到了一个完全一致的匹配,就返回‘1’,否则返回‘0’ %ERROR无参数,如果最近一次(在EXTENDER字段填有‘E’的)操作码产生了一个错误,就返回‘1’,否则返回‘0’ %float(numeric expression)返回float类型的值 %FOUND(filename)如果最近一次对文件的操作(CHAIN、DELETE、SETGT、SETLL)、对数组的操作(LOOKUP)、对字符串的操作(CHECK、CHECKR、SCAN)成功的话,就返回‘1’,否则返回‘0’

%INT(numeric expression)返回整形的值

%LEN(any expression)返回数字或字符串的长度

%OPEN(filename)如果指定的文件的状态为打开,就返回‘1’,否则返回‘0’ %PADDR(procedure name)返回函数的指针 %PARMS无参数,返回传递给函数的参数个数

%REPLACE(替代串:被替代的串(:开始位(:替代的长度)))用‘替代串’替代‘被替代串中’的一部分

%SCAN(search argument:string to be searched(:start position))当找到STRING TO BE SEARCHED时,返回位置数,否则返回‘0’

%SIZE(variable,array,literal(:* all))返回变量或者是数组的大小 %STR(pointer(:maximum length))返回由pointer指定的字符串去掉前导空格之后的串

%SUBSTR(string:start(:length))取子串 %TRIM(string)去掉字符串的前导和末尾空格 %TRIML(string)去掉字符串的前导空格 %TRIMR(string)去掉字符串的末尾空格 %UNS(numeric expression)返回无符号数

61676237.doc – 第 27 页 共 39 页

新增操作码

新增CAT, CHECK,XLATE, CHECKR,DOU, DOW, EVAL, CALLB,CALLP等操作码。

CAT

连接字符串 C string1 CAT string2(:n) result 如果没有定义n,那么string1的后续空格和string2的前导空格都将会被作为有效字符放入result中。否则的话,string1的后续空格将被删除,但result的前导空格不会被删除。 例:

* The following example shows leading blanks in factor 2. After * the CAT, the RESULT contains 'MR. SMITH'.

C MOVE 'MR.' NAME 3 C MOVE ' SMITH' FIRST 6 C NAME CAT FIRST RESULT 9 * The following example shows the use of CAT without factor 1. * FLD2 is a 9 character string. Prior to the concatenation, it * contains 'ABC'; FLD1 contains 'XYZ

* After the concatenation, FLD2 contains 'ABC XYZ'. C MOVEL(P) 'ABC' FLD2 9 C MOVE 'XYZ' FLD1 3 C CAT FLD1:2 FLD2 * CAT concatenates LAST to NAME and inserts one blank as specified * in factor 2. TEMP contains 'Mr. Smith'.

C MOVE 'Mr. ' NAME 6 C MOVE 'Smith ' LAST 6 C NAME CAT LAST:1 TEMP 9 * CAT concatenates 'RPG' to STRING and places 'RPG/400' in TEMP. C MOVE '/400' STRING 4 C 'RPG' CAT STRING TEMP 7 *

* The following example is the same as the previous example except

* that TEMP is defined as a 10 byte field. P operation extender * specifies that blanks will be used in the rightmost positions * of the result field that the concatenation result, 'RPG/400', * does not fill. As a result, TEMP contains 'RPG/400' * after concatenation.

C MOVE *ALL'*' TEMP 10 C MOVE '/400' STRING 4 C 'RPG' CAT(P) STRING TEMP

* After this CAT operation, the field TEMP contains 'RPG/4'. * Because the field TEMP was not large enough, truncation occurred. C MOVE '/400' STRING 4

61676237.doc – 第 28 页 共 39 页

联系合同范文客服:xxxxx#qq.com(#替换为@)