ABAP 字符串变量和字符变量的区别
ABAP 字符串变量和字符变量的区别
字符变量
字符变量是通过DATA语句后面跟上TYPE C进行定义的,且跟上LENGTH n来定义字符变量的长度。字符变量的长度定义后就不能再改变,它没有象C语言用'[message]'
示字符变量结束。在ABAP中所有在字符右边的空格都将被忽略,也就是说将一个由空格字组成字符串赋值给字符变量,系统仍然认为是个空字符串(empty/initial)。
DATA:cvar TYPE cLENGTH 20,
len TYPE i.
cvar=''.
len=STRLEN(cvar).
WRITE:/'Charlen:',len.
这段代码将一个由空格组成的字符串赋值给字符变量,系统得到变量长度是0.
注意:有一个特例,在concatenate语句中的separated by'',该语句中的''将作为空格处理而非空字符串处理。
字符串变量
字符串变量在内存里是由两部分组成:数据管理头和字符串数据。在数据管理头里有指向字符串数据指针域和字符串长度指示域。字符串变量最大理论长度为2147483647个字符,它的长度常常受ztta/max_memreq_MB参数和并发处理进程限制。
DATA:svar TYPE string,
len TYPE i.
svar=''.
len=STRLEN(svar).
WRITE:/'Stringlen:',len.
运行该段代码,字符串的长度也是0。这主要由于字符常量''在ABAP里当作字符变量处理,这样空格就被忽略了(也就是认为是初始化的)。
我们可以使用字符串常量来避免该问题。字符串常量和字符常量的区别主
。使用字要起始和结束的标记符号不同,字符串常量使用"`",字符常量使用"'"符串常量``,我们将可以得到包含空格的字符串变量,系统将不忽略尾部的空格。
expected result:
DATA:svar TYPE string,
len TYPE i.
svar=``.
len=STRLEN(svar).
WRITE:/'Stringlen:',len.
注意:ABAP将保留关键字SPACE定义为一个字符长度的字符常量,参见系统代码单元:SYSINI。因此,将SPACE赋值给字符串变量,字符串变量认为空,而非是一个空格。如果要将空格串赋值给字符串变量,我们就需要用到字符串常量赋值。请参见下面用空格替换分号的代码:
DATA:cvar TYPE cLENGTH 20,
svar TYPE string,
len TYPE i.
cvar='A;B;C;D;E'.
REPLACE ALL OCCURRENCES OF';'IN cvar WITH''."(1)
WRITE:/cvar.
REPLACE ALL OCCURRENCES OF';'IN cvar WITH space."(2)
WRITE:/cvar.
REPLACE ALL OCCURRENCES OF';'IN cvar WITH``."(3)
WRITE:/cvar.
svar=`A;B;C;D;E`.
REPLACE ALL OCCURRENCES OF';'IN svar WITH``."(4)
WRITE:/svar.
运行该代码我们看到(1)和(2)没有得到需要的结构,字符常量(space和'')都被系统当作空字符处理,而非空格字符处理。代码(3)也不能得出正确的结果,主要由于``将先转换为字符变量,再参与计算,这样空格又被忽略。只有代码(4)才能得到我们需要的结果:A BC DE.
与其他类型变量混合使用
DATA:cvar TYPE cLENGTH 20,svar TYPE string,pvar TYPE pLENGTH 5,l
TYPE i.
pvar=5.
cvar=pvar.
l=STRLEN(cvar).
WRITE:/'Content:|',cvar,'|(',l,')'.
svar=pvar.
l=STRLEN(svar).
WRITE:/'Content:|',svar,'|(',l,')'.
-5. pvar=
cvar=pvar.
l=STRLEN(cvar).
WRITE:/'Content:|',cvar,'|(',l,')'.
svar=pvar.
l=STRLEN(svar).
WRITE:/'Content:|',svar,'|(',l,')'.
使用字符变量将使用右对齐的转换进行赋值,其中最右边一位为符号位,如果是正5符号将为空格将被忽略,字符长度将为19。如果负5的话符号将为"-"占用,那样字符长度将为20.
使用字符串变量将使用左对齐的转换进行赋值,其中最左边一位为符号位,如果是正5符号将为空格,字符长度将为2。如果负5的话符号将为"-"占用,那样字符长度仍然为2.
对于这个赋值转换差异,大家在代码处理时一定要注意。
使用字符串变量的缺点
很多人都会认为使用字符串变量将会影响性能,其实这对于ABAP系统来说不是很大问题,ABAP程序的性能更多取决数据的处理性能。
子串处理
使用字符变量你可以使用下列方式进行字串赋值。
DATA:cvar TYPE cLENGTH 20,svar TYPE stringi.
cvar='Hello World'.
cvar+5(1)=','.
write:/cvar.
但对于字符串变量,你就不能这么操作,你就得需要使用REPLACE命令进
行字串处理。
DATA:cvar TYPE cLENGTH 20,svar TYPE stringi.
svar='Hello World'."
svar+5(1)=','.=compiler error REPLACE SECTION OFFSET 5LENGTH 1OF svar WITH','.
WRITE:/svar.
So,you have to write alittle bit more code.
字符串翻译
If you need to translate your report to different languages you can just add anummer in brackets after the literal'Error Message'(001)which is more readable as text-001.This is not working with string literals.
几个常用字符串处理类
CL_ABAP_CHAR_UTILITIES CL_ABAP_STRING_UTILITIES Source URL:本文
来自CSDN博客:作者:web-software发表于2010-10-20 21:10原文链接
评论:0查看评论发表评论
最新新闻:
?王煜全:诺基亚若不更新观念光裁员不解决问题(2010-10-21 22:38) ?诺基亚宣布Qt为Symbian和MeeGo唯一开发环境(2010-10-21 22:01) PC Magazine:苹果为什么不能统治PC市场(2010-10-21 21:43) ?
?微软WP7超越Android、iOS的五大优势(2010-10-21 21:36) ?Globalization:JavaScript全球化插件(2010-10-21 21:02) 编辑推荐:成为一名优秀程序员所需要知道的那些事
网站导航:博客园首页我的园子新闻闪存小组博问知识库