加入SOA技术圈测试第一篇:ABAP 编程点滴(不断更新中)
2006-08-31 17:11
477 查看
1、LINE-SELECTION的使用注意
在使用 AT LINE-SELECTION的HIDE功能是,HIDE语句传递的变量必须与其对应的行在同一行,否则变量值不能被正确传递。
错误:Hide在ULINE语句下,和相关变量不在同一行!
[align=left][/align]
[align=left] (4) REC_LFA1-LIFNR,[/align]
[align=left] (40) REC_LFA1-NAME1.[/align]
[align=left] ULINE.[/align]
[align=left] HIDE: REC_LFA1-LIFNR,REC_LFA1-NAME1.[/align]
正确:
[align=left] WRITE:/1 SY-VLINE NO-GAP,[/align]
[align=left] (4) REC_LFA1-LIFNR,[/align]
[align=left] (40) REC_LFA1-NAME1.[/align]
[align=left] HIDE: REC_LFA1-LIFNR,REC_LFA1-NAME1.[/align]
ULINE.
2、Do循环一种比较有趣的用法
abap中的do循环可以做一种比较有趣的循环,因为在一个HR的程序中用到了这个功能,趁还记得赶紧整理出来。
DATA: BEGIN OF TEXT,
WORD1(4) VALUE 'This',
WORD2(4) VALUE 'is',
WORD3(4) VALUE 'a',
WORD4(4) VALUE 'loop',
WORD5(4) VALUE 'That',
WORD6(4) VALUE 'is',
WORD7(4) VALUE 'a',
WORD8(4) VALUE 'loop',
END OF TEXT.
DATA: STRING1(4), STRING2(4).
DO 8 TIMES VARYING STRING1 FROM TEXT-WORD1 NEXT TEXT-WORD2.
WRITE STRING1.
IF STRING1 = 'is'.
STRING1 = 'was'.
ENDIF.
ENDDO.
SKIP.
DO 4 TIMES VARYING STRING1 FROM TEXT-WORD1 NEXT TEXT-WORD3
VARYING STRING2 FROM TEXT-WORD2 NEXT TEXT-WORD4.
WRITE: STRING1, STRING2.
ENDDO.
输出如以下所示:
This is a loop That is a loop
This was a loop That was a loop
以上代码是修改了一下abap中文帮助的一个小示例得来得。可以看到do在这种循环方式下,循环中可以修改所传入的字段串中组件的值,并且循环的step由 FROM ...(组件) NEXT ...(组件) 中的step决定。
3、去除字段或者变量的前导0
去前导0:SHIFT REC_PER-NO LEFT DELETING LEADING '0'.
在普通输出或者smartforms中可以使用:字段名(C)
也可以使用一个FM:CONVERSION_EXIT_ALPHA_OUTPUT
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT =
* IMPORTING
* OUTPUT = .
4、判断内表中是否有数据行
一是使用LINES语法,如下
IF LINES( TAB_BKPF ) < 1.
MESSAGE ID 'ZFI001' TYPE 'I' NUMBER 004.
RETURN.
ELSE.
SORT TAB_BKPF BY BUKRS BELNR BLART.
ENDIF.
二是使用DESCRIBES,如下
DESCRIBE TABLE <itab> [LINES <lin>] [OCCURS <occ>].
5、字串操作注意事项
连接字串:CONCATENATE <c1> ... <cn> INTO <c> [SEPARATED BY <s>].
使用CONCATENATE连接字符串是,为了防止生成的数据被截断,最好将输出到的变量定义为String类型。
并且该命令忽略被连接的各个字符串的尾部空格
拆分字串: SPLIT <c> AT <del> INTO <c1> ... <cn>.
使用SPLIT拆分字串时,如果源字串能够拆分的字串多过指定的数目,则源字串的最后剩余部分将写入最后一个字串,为了避免这种情况,最好使用内表进行操作:
SPLIT S_SOURCE AT sep INTO TABLE itab. 这样源字串会生成N行的内表。
6、ABAP中的转义符 #
ABAP程序中在对某些特别字符进行处理时要用到转义符 #.
如在字符串比较关键字 CP 和 NP 中,可以使用通配符进行匹配,但是如果要匹配通配符本身、转义符本身以及大小写和空格等特殊字符时,可用#实现:
'ABC' CP '*#b*' 本例返回值为假,因为 #b 限定了匹配小写的字符b,同样如 #* 将通配符 * 转回原意, #+ 也将通配符 + 转回原意, ## 将转移字符本身转回原意, # 用于匹配结尾空格,空格数自定。
在使用 AT LINE-SELECTION的HIDE功能是,HIDE语句传递的变量必须与其对应的行在同一行,否则变量值不能被正确传递。
错误:Hide在ULINE语句下,和相关变量不在同一行!
[align=left][/align]
[align=left] (4) REC_LFA1-LIFNR,[/align]
[align=left] (40) REC_LFA1-NAME1.[/align]
[align=left] ULINE.[/align]
[align=left] HIDE: REC_LFA1-LIFNR,REC_LFA1-NAME1.[/align]
正确:
[align=left] WRITE:/1 SY-VLINE NO-GAP,[/align]
[align=left] (4) REC_LFA1-LIFNR,[/align]
[align=left] (40) REC_LFA1-NAME1.[/align]
[align=left] HIDE: REC_LFA1-LIFNR,REC_LFA1-NAME1.[/align]
ULINE.
2、Do循环一种比较有趣的用法
abap中的do循环可以做一种比较有趣的循环,因为在一个HR的程序中用到了这个功能,趁还记得赶紧整理出来。
DATA: BEGIN OF TEXT,
WORD1(4) VALUE 'This',
WORD2(4) VALUE 'is',
WORD3(4) VALUE 'a',
WORD4(4) VALUE 'loop',
WORD5(4) VALUE 'That',
WORD6(4) VALUE 'is',
WORD7(4) VALUE 'a',
WORD8(4) VALUE 'loop',
END OF TEXT.
DATA: STRING1(4), STRING2(4).
DO 8 TIMES VARYING STRING1 FROM TEXT-WORD1 NEXT TEXT-WORD2.
WRITE STRING1.
IF STRING1 = 'is'.
STRING1 = 'was'.
ENDIF.
ENDDO.
SKIP.
DO 4 TIMES VARYING STRING1 FROM TEXT-WORD1 NEXT TEXT-WORD3
VARYING STRING2 FROM TEXT-WORD2 NEXT TEXT-WORD4.
WRITE: STRING1, STRING2.
ENDDO.
输出如以下所示:
This is a loop That is a loop
This was a loop That was a loop
以上代码是修改了一下abap中文帮助的一个小示例得来得。可以看到do在这种循环方式下,循环中可以修改所传入的字段串中组件的值,并且循环的step由 FROM ...(组件) NEXT ...(组件) 中的step决定。
3、去除字段或者变量的前导0
去前导0:SHIFT REC_PER-NO LEFT DELETING LEADING '0'.
在普通输出或者smartforms中可以使用:字段名(C)
也可以使用一个FM:CONVERSION_EXIT_ALPHA_OUTPUT
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT =
* IMPORTING
* OUTPUT = .
4、判断内表中是否有数据行
一是使用LINES语法,如下
IF LINES( TAB_BKPF ) < 1.
MESSAGE ID 'ZFI001' TYPE 'I' NUMBER 004.
RETURN.
ELSE.
SORT TAB_BKPF BY BUKRS BELNR BLART.
ENDIF.
二是使用DESCRIBES,如下
DESCRIBE TABLE <itab> [LINES <lin>] [OCCURS <occ>].
5、字串操作注意事项
连接字串:CONCATENATE <c1> ... <cn> INTO <c> [SEPARATED BY <s>].
使用CONCATENATE连接字符串是,为了防止生成的数据被截断,最好将输出到的变量定义为String类型。
并且该命令忽略被连接的各个字符串的尾部空格
拆分字串: SPLIT <c> AT <del> INTO <c1> ... <cn>.
使用SPLIT拆分字串时,如果源字串能够拆分的字串多过指定的数目,则源字串的最后剩余部分将写入最后一个字串,为了避免这种情况,最好使用内表进行操作:
SPLIT S_SOURCE AT sep INTO TABLE itab. 这样源字串会生成N行的内表。
6、ABAP中的转义符 #
ABAP程序中在对某些特别字符进行处理时要用到转义符 #.
如在字符串比较关键字 CP 和 NP 中,可以使用通配符进行匹配,但是如果要匹配通配符本身、转义符本身以及大小写和空格等特殊字符时,可用#实现:
'ABC' CP '*#b*' 本例返回值为假,因为 #b 限定了匹配小写的字符b,同样如 #* 将通配符 * 转回原意, #+ 也将通配符 + 转回原意, ## 将转移字符本身转回原意, # 用于匹配结尾空格,空格数自定。
相关文章推荐
- Java技术联盟:QQ群:50668621争做Java全方位学习群.欢迎大家的加入,共同学习Java系列技术,同时不断更新JavaFx技术的进步..
- J2EE实用技术核心编程(更新程度:完毕)
- iMac使用点滴(不断更新中)
- Linux 编程总结(不断更新)
- 编程小经验,不断更新中...
- mfs权威指南(moosefs)分布式文件系统一站式解决方案(部署,性能测试)不断更新
- jni数据传递——会不断的更新,测试没有问题,再整理进来。
- Python核心编程技术之正则表达式(努力更新中)
- 苹果 iAd 编程相关资料(不断更新中……)
- 测试技术不断细分
- 软件测试网址搜集(不断更新中)
- “.NET技术”使用WCF实现SOA面向服务编程—— 架构设计
- 使用WCF实现SOA面向服务编程——使用AJAX+WCF服务“.NET技术”页面开发
- Android编程心得-常见问题解决办法(不断更新中..)
- Linux点滴【不断更新】
- 编程常用电子书(不断更新ing...)
- 一些网络技术的小结,不断更新~
- 【Linux开发技术之程序构建】Makefile学习(不断更新)
- 编程技术点滴三(C/C++)
- 编程技术点滴