为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

ABAP--字符串变量和字符变量的区别

2017-12-11 4页 doc 16KB 13阅读

用户头像

is_477730

暂无简介

举报
ABAP--字符串变量和字符变量的区别ABAP--字符串变量和字符变量的区别 ABAP--字符串变量和字符变量的区别ABAP--字符串变量和字符变量的区别 字符变量字符变量是通过DATA语句后面跟上TYPE C进行定义的,且跟上LENGTH n来定义字符变量的长度。字符变量的长度定义后就不能再改变,它没有象C语言用'/0'表示 字符变量结束。在ABAP中所有在字符右边的空格都将被忽略,也就是说将一个由空格字组成 字符串赋值给字符变量,系统仍然认为是个空字符串(empty/initial)。DATA: cvar TYPE c LENGTH 20, len T...
ABAP--字符串变量和字符变量的区别
ABAP--字符串变量和字符变量的区别 ABAP--字符串变量和字符变量的区别ABAP--字符串变量和字符变量的区别 字符变量字符变量是通过DATA语句后面跟上TYPE C进行定义的,且跟上LENGTH n来定义字符变量的长度。字符变量的长度定义后就不能再改变,它没有象C语言用'/0'示 字符变量结束。在ABAP中所有在字符右边的空格都将被忽略,也就是说将一个由空格字组成 字符串赋值给字符变量,系统仍然认为是个空字符串(empty/initial)。DATA: cvar TYPE c LENGTH 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定义为一个字符长度的字符常量,参见系统代码单 元:。因此,将SPACE赋值给字符串变量,字符串变量认为空,而非是一个空格。 如果要将空格串赋值给字符串变量,我们就需要用到字符串常量赋值。请参见下面用空格替 换分号的代码:DATA: cvar TYPE c LENGTH 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 B C D E. 与其他类型变量混合使用DATA: cvar TYPE c LENGTH 20,svar TYPE string,pvar TYPE p LENGTH 5,l TYPE i.pvar = 5.cvar = pvar.l = STRLEN( cvar ).WRITE:/ 'Content: |', cvar, '| (', l, ')'.svar = pvar.l = STRLEN( svar ).WRITE:/ 'Content: |', svar, '| (', l, ')'. pvar = - 5.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 c LENGTH 20,svar TYPE stringi.cvar = 'Hello World'.cvar+5(1) = ','.write:/ cvar.但对于字符 串变量,你就不能这么操作,你就得需要使用REPLACE命令进行字串处理。DATA: cvar TYPE c LENGTH 20,svar TYPE stringi.svar = 'Hello World'."svar+5(1) = ','. <= compiler errorREPLACE SECTION OFFSET 5 LENGTH 1 OF svar WITH ','.WRITE:/ svar. So, you have to write a little bit more code. 字符串翻译If you need to translate your report to different languages you can just add a nummer 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
/
本文档为【ABAP--字符串变量和字符变量的区别】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索