AS06课程资料-HT(5)

2019-05-18 17:47

RPG Ⅳ基础

D PRICE E INZ(1234.89) D ITMARR E DIM(10) 用内部名FRED定义一个外部描述数据结构EXTDS。

-------------------------------------------------------

数据区域:

CRTDTAARA DTAARA(TOTDTA) TYPE (*DEC) LEN(28 0) 数据区域TOTDTA在RPG程序中使用之前要预先创建;

DTAARA{( 数据区名 )}

指定与字段、数据结构、数据结构子字段或数据区数据结构相关的外部数据区的名称。 D LDAREA UDS

如果不指定,则默认为*LDA, (U: 若这是数据区数据结构,则输入 U) 。

方法一:

DTOTALS DS DTAARA(TOTDTA) D TOT_AMOUNT 8 2 D TOT_GROSS 10 2 D TOT_NET 10 2 方法二:

C *DTAARA DEFINE TOTDTA TOTALS *DTAARA DEFINE和关键字DTAARA有相同的功能.

当*DTAARA DEFINE或关键字DTAARA被指定,才能对数据区使用IN,OUT,UNLOCK命令. IN (检索数据区): OUT (写入数据区):

UNLOCK (解除锁定数据区或释放记录):

当IN,OUT或UNLOCK中Factor 2为*DTAARA时,表示程序中定义的数据区被检索或写出或解锁.

------------------------------------------------------------------------ C *LOCK IN *DTAARA

C ADD AMOUNT TOTAMT C ADD GROSS TOTGRS C ADD NET TOTNET ......

C OUT *DTAARA C UNLOCK *DTAARA

C *DTAARA DEFINE TOTAMT 8 2 C *DTAARA DEFINE TOTGRS 10 2 C *DTAARA DEFINE TOTNET 10 2

------------------------------------------------------------------------

*LDA:由系统自动为每个作业创建和删除的数据区,1024个字符. D*Local data area

D LDAREA UDS 1024 D LDFRM1 1 10

RPG Ⅳ基础

D LDFRM2 11 20 D LDTO 21 30 D LDEND 31 31 D LDKEY 32 32 D LDDEP 33 34 D LRTTYNO 45 54 C*Initialize

C *DTAARA DEFINE *LDA LDAREA C IN *DTAARA

C MOVEL LDDEP DEPNO C :

C MOVEL '0' LDEND C OUT *DTAARA

----------------------------------------------------------------------

*LIKE DEFINE 的用法

*LIKE DEFINE 被参考字段 需定义字段 定义一个字段基于另一个字段的属性(长度和小数点位置). 可以在64到68位(field length)处输入一个值: ’+’号代表result field比factor 2 长度increase ’-’号代表result field比factor 2 长度decrease.

如果64到68位为空,则代表result field比factor 2 长度相同.

------------------------------------------------------------------------------------------------ FLDA:7位字符 FLDB: (5 2)

C *LIKE DEFINE FLDA FLDP

C *LIKE DEFINE FLDA FLDQ +2 C *LIKE DEFINE FLDA FLDR - 1 C *LIKE DEFINE FLDB FLDS

C *LIKE DEFINE FLDB FLDT +1 C *LIKE DEFINE FLDB FLDU - 2 C *LIKE DEFINE FLDU FLDX ( FLDP:7 FLDQ:9 FLDR:6

FLDS: (5 2) FLDT: (6 2) FLDU: (3 2) FLDX: (3 2)

Unit 4. Manipulating Data in Calculations

EVAL的用法 FIELD1 = 10 FIELD2 = 9 FIELD3 = 8 FIELD4 = 7

RPG Ⅳ基础

*IN01 = *ON

A = 'abcdefghijklmno' (15位) CHARFIELD1 = 'There' (5位) ARR is defined with DIM(10)

C EVAL RESULT=FIELD1 + FIELD2+(FIELD3-FIELD4) RESULT=20

C EVAL *IN03 = *IN01 OR (FIELD2 > FIELD3) *IN03= *ON

C EVAL A = 'Hello ' + CHARFIELD1 A = 'Hello There ' (左对齐赋值,再填补空格)

C EVAL %SUBST(A:3:4) = '****' A = 'ab****ghijklmno'

C EVAL ARR(*) = FIELD2 * FIELD3 ARR数组的每个元素的值为72

操作扩充符

C 123.456 MULT(H) 10 RESULT3 在操作码之后的括号中指定操作扩充符。扩充符可立即跟在操作码之后或可由一个或多个空格分隔。括号之间可能指定多个 opcode 扩展器。

选择下列其中一个扩充符值:

空白: 若不执行舍入、不带锁定读取或结果字段填充或若不支持扩充符,则将字段留空。 (D): 输入 (D) 以发送 CALLB 上字符类型字段的操作描述符给接收过程。对于应用 于日期的其它操作输入 D 。 (E): 输入 (E) 表示发生错误处理。若指定了 E 扩充符,则不允许错误指示符。 (H): 若要执行舍入,则输入 (H) 。

(M): 若将应用位数规则的最大数,则输入 (M) 。

(N): 若不带锁定读取该记录,则输入 (N) 。对于其他操作,若 DEALLOC 操作将结果字段

设置为空,则输入 (N) 。

(P): 若结果字段以空白填充,则输入 (P) 。

(R): 若要应用结果小数位规则,则输入 (R) :将计算小数中间值的精度,以便小数位数的

减少不超过分配结果的小数位数。

(T): 若该操作应用于时间,则输入 (T) 。 (Z): 若该操作应用于时间戳记,则输入 (Z) 。

MULT的用法

D RESULT1 S 5P 1 D RESULT2 S 5P 1 D RESULT3 S 5P 2 D RESULT4 S 7P 2

C 123.456 MULT 10 RESULT1 ( EVAL RESULT1 = 123.456 *10) RESULT1=1234.5 小数点左边满足,右边第二位被截去

C 123.456 MULT(H) 10 RESULT2

( EVAL(H) RESULT1 = 123.456 *10)

RPG Ⅳ基础

RESULT2=1234.6 小数点左边满足,右边第二位被四舍五入 C 123.456 MULT(H) 10 RESULT3

RESULT3=234.56 小数点左边不满足, 被截去最左边一位,右边满足(数字溢出) C 1234.56789 MULT 100 RESULT4 如果编译时指定TRUNCNBR(*YES)

RESULT4=23456.78 小数点左边不满足, 被截去最左边一位, 右边第三位被截去(数字溢出). 截段数字 (TRUNCNBR) 指定在运行程序时出现数字上溢的情况下,截断值是否移至结果字段,或者是否产生错误。 注: TRUNCNBR 任选项不应用于表达式中执行的计算。(在扩充因子2 字段中寻找表达式。)若这些计算出现上溢,则将总是出现错误。 *YES:忽略数字上溢,并将截断值移至结果字段。 *NO:当检测到数字溢出时,生成运行期错误。

CAT(并置两个字符串)

Code Factor 1 Factor 2 Result Field CAT (P) 字符串1 字符串2:空格数 目标字符串 C MOVE 'RPG ' NAME 5 C MOVE 'IV ' LAST 5 C Z-ADD 0 NUM 1 0 C NAME CAT(P) LAST:NUM TEMP 10 TEMP:‘RPGIV ’(NUM为0,截去字符串1后的空格)

SCAN(扫描字符串)

Code Factor 1 Factor 2 Result Field Indicators SCAN (E) 字符串:长度 字符串:开始位置 最左边的位置 标志位 扫描Factor 2中字符串是否包含有Factor 1中的字符串.

------------------------------------------------------------------------------- C 'ABC' SCAN 'XCABCD' RESULT - - - - 90 RESULT中为3,因为字符串找到,所以*IN90=*ON .

C MOVE 'YARRYY' FIELD1 6 C MOVE 'Y' FIELD2 1

C FIELD2 SCAN FIELD1:3 ARRAY 90 数组ARRAY的1,2元素为5,6, *IN90=*ON.

C MOVE 'TESTING' FIELD1 7 C Z-ADD 2 X 1 0 C MOVEL 'TOOL' FIELD2 5

C FIELD2:4 SCAN FIELD1:X INT90 20 90 FIELD2:4取4位,为'TOOL', 因为字符串没找到,所以*IN90=*OFF . C SrchName SCAN Line C IF %FOUND C EXSR HandleLine C ENDIF

如果在Line中扫描到SrchName, %FOUND返回’1’,继续执行HandleLine.

RPG Ⅳ基础

-------------------------------------------------------------------------------------

%SCAN (扫描字符位置)

%SCAN(搜索字符:源字符:开始位置)

-------------------------------------------------------------------------------------

D source S 15A inz('Dr. Doolittle') D pos S 5U 0

C EVAL pos = %scan('oo' : source) POS=6 C EVAL pos = %scan('D' : source : 2) POS=5 C EVAL pos = %scan('abc' : source) POS=0 C EVAL pos = %scan('Dr.' : source : 2) POS=0

-------------------------------------------------------------------------------------

CHECK(检查字符) (由左到右检查)

Code Factor 1 Factor 2 Result Field Indicators

CHECK (E) 比较字符串 被比较字符串:开始位置 左起位置 - - ER FD

CHECKR(检查反向) (由右到左检查)

Code Factor 1 Factor 2 Result Field Indicators

CHECK (E) 比较字符串 被比较字符串:开始位置 右起位置 - - ER FD

SUBST(子字符串)

Code Factor 1 Factor 2 Result Field Indicators SUBST 截取的长度 源字符串:开始位置 目标字符串 标志位(ER) C Z-ADD 3 T 2 0 C MOVEL 'ABCDEF' String 10

C 2 SUBST String:T Target - - 90 - - TARGET=‘CD’,*IN90 = *OFF(没有错误发生)

------------------------------------------------------------------------------ C MOVE 'ABCDEF' String 6 C Z-ADD 4 T 1 0 C 5 SUBST String:T Result 90 Result没变化,*IN90 = *ON

------------------------------------------------------------------------------ C ' ' SCAN City C C ADD 1 C

C SUBST City:C TCntre

CITY='Toronto, Ontario',C=9,Tcntre= 'Ontario' (Factor 1为空,将截取Tcntre的长


AS06课程资料-HT(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:课堂实录《鱼游到了纸上》

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: