字符串表达式String Expressions
字符串表达式String Expressions
字符串表达式可以是字符串模板,或者是字符串操作式:
{ |string_template| } | { operand1 && operand2 [&&operand3 ... ]}
注:上面语句中的 { } 不是表达式中的一部分
字符串模板String Templates
|[literal_text][embedded_expressions][control_characters]|
注:上面语句中的 [ ] 不是表达式中的一部分,只是说明可省略,但开头与末尾的 | 是表达式中的一部分。
上面表达经过等效代入后如下:
|[c...c][ { expr [format_options] }][\n ...]|
注:上面语句中的c...c表式字面常量文本串;语句中的 { } 为表达式中的一部分;[ ] 不是表达式中的一部分,只是说明可省略;开头与末尾的 | 是表达式中的一部分。
个字符的限制,下面两个是等效的:
|...| & |...|
|...| && |...|
如果内容只有字面常量文本(没有变量表达式或控制字符\r \n \t),则还可以这样(如果包含了这些控制字符时,会原样输出,所以有这些控制字符时,请使用 |...|将字符包起来):
`...` && `...`
但是上面3个与下面3个是不一样的:
`...` & `...`
'...' & '...'
'...' && '...'
上面前面头两个还是会受255个字符长度限制,限制,但尾部空格会被忽略
在ABAP编辑器里,每行代码的最长字符个数不能超过255,所以如果有一个字面常量文本的个数大于255(实质上只能为253个,因为字面常量文本需要使用||、``、''包起来,需占用两个字符)时,可以使用使用|...| &|...|、|...| && |...|、`...` && `...`来将超长的串分成多个小的串再连接,但不能使用`...` & `...`、'...' & '...' 连接方式分成多个小串再连接,因为后两个是在编译时连接,所以还是不能大于255个,但前面3个却是在运行时连接,可以突破255的限制。
限制,但定义时没有这样的限制
str2 个字符
txt1 个字符
str2 限制
str 个,但&连接符在将多个使用``引起来的串连起来时,个数还是不能大于255,所以下面编译不能通过
限制的(使用``、''引起来的串中的控制字符会原样输出)
str =
`12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890\r\n `
&&"并且使用''引起来的字符串在连接时尾部空格会被去掉,但 `` 引起来的不会去除
'12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 '.
len = strlen( str ).
WRITE: / len."285
"使用||包起来的字面常量文本中的控制字符会起作用(但在屏幕上打印时会输出 # ,这恰好说明控制字符生效了)
str =
|12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890\r\n |
&&
|12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 |.
len = strlen( str ).
WRITE: / len."284
literal_text
为字符串表达式中的字面常量文本(literal text)部分,不能使用 { } 括起来,不能含有控制字符(如 \r \n \t这些控制字符),特殊字符|{ } \需要使用\ 进行转义。
DATA txt TYPE string.
txt = |Characters \|, \{, and \} have to be escaped by \\ in literal text.|.
WRITE: txt.
Characters |, {, and } have to be escaped by \ in literal text.
embedded_expressions
{ expr[format_options] }
上面的 { } 为内嵌表达式的一部分
expr可以为下面这些:
l 变量名
l 计算表达式(算术计算表达式、字符串表达式、位表达式)
l 内置函数
l 方法调用
DATA:p1 TYPE x LENGTH 1 VALUE '5B', "01011011
p2 TYPE x LENGTH 1 VALUE '13'. "00010011
DATA: str TYPE string.
str = |{ ( 1 + 1 ) * 2 }|."算术计算表达式
WRITE:/ str."4
str = |{ |aa| && 'bb' }|."字符串表达式
WRITE:/ str."aabb
str = |{ p1 BIT-AND p2 }|."位表达式
WRITE:/ str."13 "X类型转换为字符串类型
str = |{ str }|."变量名
WRITE: / str."13
str = |{ strlen( str ) }|."内置函数
WRITE: / str."2
方法调用:
CLASS demo DEFINITION.
PUBLIC SECTION.
CLASS-METHODS: main,
method RETURNING value(p) TYPE string.
PRIVATE SECTION.
CLASS-DATA attr TYPE string VALUE `Hello`.
ENDCLASS. "demo DEFINITION
CLASS demo IMPLEMENTATION.
METHOD main.
DATA txt TYPE string.
txt = |{ attr }{ method( ) "方法
WIDTH = 6 ALIGN = RIGHT }{ attr }|.
WRITE: txt.
ENDMETHOD.
METHOD method.
p = `world`.
attr = '!'.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
demo=>main( ).
Hello world!
注:字符串表达式中的方法调用是在整个表达式分析完毕之后才调用的。如果某个方法调用时修改了某个变量的值,并且这个变量又为字符串表达式中的操作数,则修改只会影响方法调用右边的变量值,比如这里的attr,在方法 method 调用前(左)不会发生改变,只是最末(右)被修改了
Embedded Expressions - Predefined Formats
如果没有明确的使用format_options格式选项,则expr会使用默认的内嵌表达式预置格式(Embedded Expressions - Predefined Formats)来格式化,默认格式如下:
Text length(文本长度):默认会使用最小且能输出整个expr的长度,比如I类型的变量不会使用千分位符号
,
str TYPE string.
str = |{ i }|.
WRITE:/ str, i."123456789 123456.789
Alignment(对齐方式):默认所有类型的expr都是左对齐
expr如果为c, d, n, and t固定长度的字符类型,则尾部的空格会被去掉;如果是string类型,则会保留
expr如果是x and xstring类型,则会以十六进制格式会,即每个字节会以二个十六进制的字符来表示
expr如果是数字类型,则负号(是负数时)放在数据的左边,正数默认没有符号。小数点通常使用(.)来表示,另外不会有千分位分隔符
format_options
如是使用了format_options后,会覆盖默认的的内嵌表达式预置格式(Embedded Expressions - Predefined Formats)。
[直到dec位小数。适用所有数字类型。且不能与 TIMEZONE 选项一起使用
[,则输出还是不输出前导空格(使用空格代替)。且不能与 TIMEZONE 选项一起使用,默认为YES。(val)中的val指值为YES或者是NO的变量,如CL_ABAP_FORMAT=>Z_YES、CL_ABAP_FORMAT=>Z_NO
[STYLE = SIMPLE|SIGN_AS_POSTFIX|SCALE_PRESERVING|SCIENTIFIC|SCIENTIFIC_WITH_LEADING_ZERO|SCALE_PRESERVING_SCIENTIFIC|ENGINEERING|(val)] "将数字格式化成科学计数法的格式,每一种样式请参数后面的实例,不能与 CURRENCY, SIGN, or TIMEZONE 一起使用。默认为SIMPLE
[CURRENCY = cur] " 指定货币代码,决定货币小数位数。货币代码在 TCURC 表中(数据库字段TCURC-WAERS存储了货币代码,一般货币都是精确到小数点后两位,除非这些货币代码在 TCURX-CURRKEY出现,则此时的货币的小数位以TCURX-CURRDEC为准)。 只能是i, p, or f类型的数字,且不能与 STYLE or TIMEZONE 一起使用
[NUMBER = RAW|USER|ENVIRONMENT|(val)] "指定了数字的小数点与千分位分隔符的符号,不能与TIMEZONE一起使用。默认为RAW
[DATE = RAW|ISO|USER|ENVIRONMENT|(val)] "日期格式化,只适用于d类型。默认为RAW。
[TIME = RAW|ISO|USER|ENVIRONMENT|(val)] "时间格式化,只适用于t类型。默认为RAW。
[TIMESTAMP = SPACE|ISO|USER|ENVIRONMENT|(val)] "用来格式化time stamp(date/time)。只适用于 p(8.0)(即词典中的TIMESTAMP类型)或p(11.7)(即词典中的TIMESTAMPL 类型)。
[TIMEZONE = tz] "只适用于TIMESTAMP、TIMESTAMPL 类型。时区值可以从ttzz-tzone中取得。将 time stamp转换为指定的地时区里的日期与时间(to the local date and the local time of the specified time zone)
[COUNTRY = cty] ... . "对 NUMBER, DATE, TIME, and TIMESTAMP选项的格式有影响,可从 T005X-LAND 取值
SIGN
,
str TYPE string.
str = |{ i1 SIGN = LEFT }|.
WRITE:/ str.
str = |{ i2 SIGN = LEFT }|.
WRITE:/ str.
str = |{ i1 SIGN = LEFTPLUS }|.
WRITE:/ str.
str = |{ i2 SIGN = LEFTPLUS }|.
WRITE:/ str.
str = |{ i1 SIGN = LEFTSPACE }|.
WRITE:/ str.
str = |{ i2 SIGN = LEFTSPACE }|.
WRITE:/ str.
str = |{ i1 SIGN = RIGHT }|.
WRITE:/ str.
str = |{ i2 SIGN = RIGHT }|.
WRITE:/ str.
str = |{ i1 SIGN = RIGHTPLUS }|.
WRITE:/ str.
str = |{ i2 SIGN = RIGHTPLUS }|.
WRITE:/ str.
str = |{ i1 SIGN = RIGHTSPACE }|.
WRITE:/ str.
str = |{ i2 SIGN = RIGHTSPACE }|.
WRITE:/ str.
-1000
1000
-1000
+1000
-1000
1000
1000-
1000
1000-
1000+
1000-
1000
EXPONENT
DATA: f TYPE f VALUE '123.456',
str TYPE string.
WRITE:/ f.
str = |{ f EXPONENT = 3 }|.
WRITE:/ str.
1,2345600000000000E+02
0.123456E+03
DECIMALS
,
f TYPE f VALUE '123.456',
str TYPE string.
WRITE:/ i,f.
str = |{ i DECIMALS = 2 }|.
WRITE:/ str.
str = |{ f DECIMALS = 2 }|.
WRITE:/ str.
123.456 1,2345600000000000E+02
123456.00
123.46
ZERO
,
str TYPE string.
WRITE:/ i.
str = |{ i ZERO = YES }|.
WRITE:/ str.
str = |{ i ZERO = NO }|.
WRITE:/ str.
0
0
STYLE
,
f TYPE f VALUE '-123.456',
str TYPE string.
WRITE:/ i,f.
str = |{ i STYLE = SIMPLE }|.
WRITE:/ str.
str = |{ f STYLE = SIMPLE }|.
WRITE:/ str.
str = |{ i STYLE = SIGN_AS_POSTFIX }|.
WRITE:/ str.
str = |{ f STYLE = SIGN_AS_POSTFIX }|.
WRITE:/ str.
str = |{ i STYLE = SCALE_PRESERVING }|.
WRITE:/ str.
str = |{ f STYLE = SCALE_PRESERVING }|.
WRITE:/ str.
str = |{ i STYLE = SCIENTIFIC }|.
WRITE:/ str.
str = |{ f STYLE = SCIENTIFIC }|.
WRITE:/ str.
str = |{ i STYLE = SCIENTIFIC_WITH_LEADING_ZERO }|.
WRITE:/ str.
str = |{ f STYLE = SCIENTIFIC_WITH_LEADING_ZERO }|.
WRITE:/ str.
str = |{ i STYLE = SCALE_PRESERVING_SCIENTIFIC }|.
WRITE:/ str.
str = |{ f STYLE = SCALE_PRESERVING_SCIENTIFIC }|.
WRITE:/ str.
str = |{ i STYLE = ENGINEERING }|.
WRITE:/ str.
str = |{ f STYLE = ENGINEERING }|.
WRITE:/ str.
123.456- -1,2345600000000000E+02
-123456
-123.456
123456-
123.456-
-123456
-123.456
-1.23456E+05
-1.23456E+02
-0.123456E+06
-0.123456E+03
-1.23456E+0005
-1.23456E+0002
-123.456E+03
-123.456E+00
CURRENCY
,
f TYPE f VALUE '123.456',
str TYPE string.
WRITE:/ i,f.
str = |{ i CURRENCY = 'CNY' }|."人民币
WRITE:/ str.
str = |{ f CURRENCY = 'CNY' }|.
WRITE:/ str.
str = |{ i CURRENCY = 'GBP' }|."英磅
WRITE:/ str.
str = |{ f CURRENCY = 'GBP' }|.
WRITE:/ str.
str = |{ i CURRENCY = 'IGPM' }|."美元
WRITE:/ str.
str = |{ f CURRENCY = 'IGPM' }|.
WRITE:/ str.
str = |{ i CURRENCY = 'JPY' }|."日元
WRITE:/ str.
str = |{ f CURRENCY = 'JPY' }|.
WRITE:/ str.
123.456 1,2345600000000000E+02
1234.56
123.46
1234.56
123.46
1234.56
123.46
123456
123
NUMBER
DATA: f TYPE f VALUE '12345678.9',
str TYPE string.
WRITE:/ f.
str = |{ f NUMBER = RAW }|."小位点为 .,且没有千分位分隔符
WRITE:/ str.
str = |{ f NUMBER = USER }|."根据用户主数据( user master record)设置来确定
WRITE:/ str.
str = |{ f NUMBER = ENVIRONMENT }|."根据环境设置来确定。如果没有使用 SET COUNTRY 来设置 language environment,则与USER一样
WRITE:/ str.
SET COUNTRY 'US'.
str = |{ f NUMBER = ENVIRONMENT }|.
WRITE:/ str.
1,2345678900000000E+07
12345678.9
12345678,9
12345678,9
12345678.9
DATE
DATA: d TYPE d VALUE '20130905',
str TYPE string.
WRITE:/ d.
str = |{ d DATE = RAW }|."不会带有任何格式
WRITE:/ str.
str = |{ d DATE = ISO }|."使用yyyy-mm-dd格式化
WRITE:/ str.
str = |{ d DATE = USER }|."根据用户主数据(user master data)的设置来格式化
WRITE:/ str.
str = |{ d DATE = ENVIRONMENT }|."根据当前环境设置来格式化(可通过SET COUNTRY 来设置当前环境的language environment),没设置时,使用USER
WRITE:/ str.
set COUNTRY 'US'.
str = |{ d DATE = ENVIRONMENT }|.
WRITE:/ str.
05092013
20130905
2013-09-05
05.09.2013
05.09.2013
09/05/2013
TIME
DATA: t TYPE t VALUE '185959',
str TYPE string.
WRITE:/ t.
str = |{ t TIME = RAW }|."不会带有任何格式
WRITE:/ str.
str = |{ t TIME = ISO }|."使用 hh:mm:ss 格式化
WRITE:/ str.
str = |{ t TIME = USER }|."根据用户主数据(user master data)的设置来格式化
WRITE:/ str.
str = |{ t TIME = ENVIRONMENT }|."根据当前环境设置来格式化(可通过SET COUNTRY 来设置当前环境的language environment),没设置时,使用USER
WRITE:/ str.
185959
185959
18:59:59
18:59:59
18:59:59
TIMESTAMP
DATA: t TYPE timestamp VALUE '20130905153159',"YYYYMMDDhhmmss
str TYPE string.
WRITE:/ t.
str = |{ t TIMESTAMP = SPACE }|."使用 yyyy-mm-dd hh:mm:ss.zzzzzzz 格式化,并且与time zone相关,可与 TIMEZONE 一起使用
WRITE:/ str.
str = |{ t TIMESTAMP = ISO }|."使用 yyyy-mm-ddThh:mm:ss,zzzzzzz 格式化
WRITE:/ str.
str = |{ t TIMESTAMP = USER }|."根据用户主数据(user master data)的设置来格式化
WRITE:/ str.
str = |{ t TIMESTAMP = ENVIRONMENT }|."根据当前环境设置来格式化(可通过SET COUNTRY 来设置当前环境的language environment),没设置时,使用USER
WRITE:/ str.
20.130.905.153.159
2013-09-05 15:31:59
2013-09-05T15:31:59
05.09.2013 15:31:59
05.09.2013 15:31:59
TIMEZONE
DATA: t TYPE timestamp VALUE '20130905153159',"YYYYMMDDhhmmss
tzone TYPE ttzz-tzone,
str TYPE string.
WRITE:/ t.
str = |{ t TIMESTAMP = SPACE }|.
WRITE:/ str.
tzone = 'UTC'.
str = |{ t TIMESTAMP = SPACE TIMEZONE = tzone }|.
WRITE:/ str.
tzone = 'UTC+8'.
str = |{ t TIMESTAMP = SPACE TIMEZONE = tzone }|.
WRITE:/ str.
2013-09-05 15:31:59
2013-09-05 15:31:59
2013-09-05 23:31:59
control_characters
只识别下面三个:
Control Character |
Meaning |
Hexadecimal Value |
\n |
line break |
0A |
\r |
return |
0D |
\t |
tabulator |
09 |
控制字符会被替换为相应的编码的十六进制
字符串操作式Character String Operator
... operand1 && operand2 ...
operand可以为下面这些:
l 变量名(ata objects)
l 字符串表达式(string expressions)
l 内置函数(predefined functions)
l 方法调用(functional methods)
.
text = text && ` ` && 'world ' && |!| && i.
WRITE: / text.
Hello world!123
字符串表达式String Expressions的更多相关文章
- [SAP ABAP开发技术总结]字符串表达式String Expressions
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
在进行项目开发的时候,刚好需要用到对字符串表达式进行求值的处理场景,因此寻找了几个符合要求的第三方组件LambdaParser.DynamicExpresso.Z.Expressions,它们各自功能 ...
- 使用堆栈结构进行字符串表达式("7*2-5*3-3+6/3")的计算
问题: 给定字符串String str = "7*2-5*3-3+6/3", 求出字符串里面表达式的结果? 像javascript有自带的eval()方法,可以直接计算.但java ...
- CF552E 字符串 表达式求值
http://codeforces.com/contest/552/problem/E E. Vanya and Brackets time limit per test 1 second memor ...
- Kotlin——初级篇(八):关于字符串(String)常用操作汇总
在前面讲解Kotlin数据类型的时候,提到了字符串类型,当然关于其定义在前面的章节中已经讲解过了.对Kotlin中的数据类型不清楚的同学.请参考Kotlin--初级篇(三):数据类型详解这篇文章. 在 ...
- 字符串(string+StringBuilder) +正则表达式元字符
创建字符串: System.String(string是这个类的别名) System.Text.StringBuilder System.String类: 1,创建字符串 string s = &qu ...
- C++之字符串表达式求值
关于字符串表达式求值,应该是程序猿们机试或者面试时候常见问题之一,昨天参加国内某IT的机试,压轴便为此题,今天抽空对其进行了研究. 算术表达式中最常见的表示法形式有 中缀.前缀和 后缀表示法.中缀表示 ...
- PHP 实现字符串表达式计算
什么是字符串表达式?即,将我们常见的表达式文本写到了字符串中,如:"$age >= 20",$age 的值是动态的整型变量. 什么是字符串表达式计算?即,我们需要一段程序来执 ...
- Kotlin——关于字符串(String)常用操作汇总
在前面讲解Kotlin数据类型的时候,提到了字符串类型,当然关于其定义在前面的章节中已经讲解过了.对Kotlin中的数据类型不清楚的同学.请参考Kotlin——初级篇(三):数据类型详解这篇文章. 在 ...
随机推荐
- eclipse项目中启动项目无法载入类
在eclipse 项目中,当载入jar包后,加载里面的包,可以找到此类,但是编译运行的时候报错java.lang.ClassNotFoundException: 1,路径名未写正确: 2,配置出错; ...
- Perl的基本语法<总结> (转载)
前言:这篇文章是花了我很多时间.费了我很多心血才完成的,虽然连我自己都觉得无法达到尽善尽美的境界,但希望能帮助大家入门,稍微了解到Perl 到底是个什么样的东西,Perl到底有那些强大的功能,那么这篇 ...
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.10.SportsStore:上传图片
1 扩展数据库 打开表定义,新增两列可空 ) 2 增强领域模型 为Products类添加如下属性 publicstring ImageMimeType { get; set; } 第一个属性不会在界面 ...
- OC基础数据类型-NSData
1.NSData,数据,当我们需要把一些信息写入到文件里或发送到网络上,我们需要把这些数据转换下,变成纯粹的0.1字符流 1 NSString * str = @"hello, world! ...
- 如何修改ECShop发货单查询显示个数
使用ecshop的朋友都知道,商城首页调用的发货单查询,默认显示的10个.很多朋友想修改它的数量,可是在后台管理却找不到相应的地方,这个修改和显示排行榜的数量修改方法不一样.排行榜是可以在后台修改的, ...
- 20145227《Java程序设计》第1次实验报告
20145227<Java程序设计>第1次实验报告 实验步骤与内容 命令行下Java程序开发 1.打开 cmd ,输入 mkdir 20145227 命令建立实验目录,然后输入 cd 20 ...
- 使用radioGroup的时候,每个radioButton的状态选择器要使用 state_checked=""属性,不能使用selected
使用radioGroup的时候,每个radioButton的状态选择器要使用 state_checked=""属性,不能使用selected
- Spring MVC 的汉字乱码问题
在web.xml文件加入 <filter> <filter-name>characterEncodingFilter</filter-name> <filte ...
- JSONArray传值的使用小结
今天使用了SpringMVC+mybatis传值.从controller中传到service中.可是由于版本问题参数中不能有大写和下划线,在service中只能用String 来接受json字符串.接 ...
- 测试-Animator的“当前剪辑CurrentAnimatorStateInfo”
左边是Transport到Idle,右边是完全到Idle 当进入过渡时,事实上Transport状态并未结束,通过下面打印出来的hash可以看出还是Transport的状态 过渡结束才正式变为Idle ...