SAP的ABAP4语言中文培训教材第一部分第六章处理数据.docx
- 文档编号:24630589
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:49
- 大小:44.26KB
SAP的ABAP4语言中文培训教材第一部分第六章处理数据.docx
《SAP的ABAP4语言中文培训教材第一部分第六章处理数据.docx》由会员分享,可在线阅读,更多相关《SAP的ABAP4语言中文培训教材第一部分第六章处理数据.docx(49页珍藏版)》请在冰豆网上搜索。
SAP的ABAP4语言中文培训教材第一部分第六章处理数据
第六章1处理数据
概览
内容
赋值
用MOVE赋值
用WRITETO赋值
将值重置为默认值
数值运算
执行算术运算
使用数学函数
处理压缩数
处理日期和时间字段
处理字符串
移动字段内容
替换字段内容
转换大/小写并替换字符
转换为可排序格式
覆盖字符字段
搜索字符串
获得字符串长度
压缩字段内容
连接字符串
拆分字符串
分配字符串部分
指定数据对象的偏移量
类型转换
基本数据类型的可转换性
字段串的可转换性
内表的可转换性
对齐数据对象
本节描述如何使用(处理)数据对象。
涉及到以下主题:
1赋值
在ABAP/4中,可以在声明语句和操作语句中给数据对象赋值。
在声明语句中,将初始值赋给声明的数据对象。
为此,可以在DATA、常量或STATICS语句中使用VALUE参数(参见创建数据对象和数据类型(页Error!
Notavalidlink.))。
要在操作语句中给数据对象赋值,可以使用:
_MOVE语句,对应于赋值运算符(=)
_WRITETO语句
本节提到的大多数操作不仅适用于程序中的内部字段,而且适用于程序参数、表工作区、系统字段、字段符号和形式参数,以及不更改数据对象情况下的常量和文字。
当讨论有关字段的操作时,参照相对于一般字段,而并非仅是内部字段。
1用MOVE赋值
本节主题描述如何使用MOVE语句或赋值运算符(=)。
其中包括:
1基本赋值操作
要将值(文字)或源字段的内容赋给目标字段,可以使用MOVE语句或赋值运算符(=)。
MOVE语句的语法如下所示:
语法
MOVE
MOVE语句将源字段
传送后,
赋值运算符(=)的语法如下所示:
语法
MOVE语句和赋值运算符功能相同。
如下所示,可以多重赋值:
ABAP/4按从右到左的顺序进行处理,如下所示:
MOVE
MOVE
MOVE
在以上语句中,不管用户主记录如何,小数点必须用句点(.)指定。
源字段和目标字段可以是不同数据类型。
其它程序设计语言通常将不同数据类型之间的赋值限制在少数可能组合之内,而ABAP/4则提供大量自动类型转换。
例如,可以将基本数据类型的源字段内容赋给其它基本数据类型的目标字段(除了数据类型D无法赋给数据类型T,反之亦然)。
ABAP/4也支持结构化数据和基本数据对象之间或结构不同的数据对象之间的赋值。
对于每一赋值语句(用MOVE或赋值运算符),系统都检查源字段和目标字段的数据类型。
如果定义了此类组合的类型转换,则将源字段内容转换为目标字段数据类型并将其值赋给目标字段。
要获得可能数据类型转换的综述以及在ABAP/4中是如何定义的等信息,请参见类型转换(页22)。
DATA:
T(10),
NUMBERTYPEPDECIMALS1,
COUNTTYPEPDECIMALS1.
T=1111.
MOVE'5.3'TONUMBER.
COUNT=NUMBER.
赋值结果是字段T、NUMBER和COUNT分别包含值‘1111’、5.3和5.3。
请注意,当赋值数值1111时,系统将它转换为长度为10的字符串。
要在运行时指定源字段和目标字段,必须按使用字段符号所述,使用字段符号。
因此无法使用MOVE语句(或赋值运算符)。
2用指定偏移量赋值
可以在每条ABAP/4语句中为基本数据类型指定偏移量和长度(参见指定数据对象的偏移量(页21))。
在这种情况下,MOVE语句语法如下:
语法
MOVE
赋值运算符语法如下:
语法
将字段
在MOVE语句中,所有偏移量和长度指定都可为变量。
这同样适用于采用赋值运算符的语句,只要也可以写做MOVE语句。
在赋值运算符之后未指定字段名称的语句中,(例如在数学表达式中),所有偏移量和长度指定都必须是无符号数值。
详细信息,参见数值运算(页6))。
SAP建议只在非数值字段之间才采用指定偏移量和长度赋值。
对于数值字段,结果毫无意义。
DATA:
F1(8)VALUE'ABCDEFGH',
F2(20).
F2+6(5)=F1+3(5).
在该示例中,赋值运算符功能如下:
DATA:
F1(8)VALUE'ABCDEFGH',
F2(8).
DATA:
OTYPEIVALUE2,
LTYPEIVALUE4.
MOVEF1TOF2.WRITEF2.
MOVEF1+O(L)TOF2.WRITE/F2.
MOVEF1TOF2+O(L).WRITE/F2.
CLEARF2.
MOVEF1TOF2+O(L).WRITE/F2.
MOVEF1+O(L)TOF2+O(L).WRITE/F2.
该过程输出如下:
ABCDEFGH
CDEF
CDABCD
ABCD
CDEF
首先,未指定偏移量将F1内容赋给F2。
然后,再指定偏移量和长度执行同样操作。
后面三条MOVE语句覆盖偏移量为2.的F2内容。
请注意,根据源类型字符(页23)中的规则,F2的右边用空格填充。
3在字段串组件之间复制值
描述的MOVE语句赋值方法适用于基本数据对象和结构化数据对象。
另外,还有一种MOVE语句变体,允许将源字段串组件内容复制到目标字段串组件中。
语法如下:
语法
MOVE-CORRESPONDING
该语句将字段串
对于每对名称,系统都执行MOVE语句,如下所示:
MOVESTRING1-
系统分别执行所有必要类型转换。
该处理不同于包括整个字段串的赋值。
在这种情况下,应用不兼容的字段串和基本字段(页25)所述的转换规则。
DATA:
BEGINOFADDRESS,
FIRSTNAME(20)VALUE'Fred',
SURNAME(20)VALUE'Flintstone',
INITIALS(4)VALUE'FF',
STREET(20)VALUE'CaveAvenue,
NUMBERTYPEIVALUE'11'.
POSTCODETYPENVALUE'98765'.
CITY(20)VALUE'Bedrock',
ENDOFADDRESS.
DATA:
BEGINOFNAME,
SURNAME(20),
FIRSTNAME(20),
INITIALS(4),
TITLE(10)VALUE'Mister',
ENDOFNAME.
MOVECORRESPONDINGADDRESSTONAME.
在该示例中,将NAME-SURNAME、NAME-FIRSTNAME和NAME-INITIALS之值设置为Flintstone、Fred和FF。
NAME-TITLE仍为值Mister。
4用WRITETO赋值
用WRITETO给数据对象赋值时,可以用WRITE语句的格式化选项(参见WRITE语句(页Error!
Notavalidlink.))。
本节主题描述
4WRITETO语句的基本形式
要将值(文字)或源字段内容写入目标字段,可以使用WRITETO语句:
语法
WRITE
WRITETO语句将源字段
写入后,
对于
Notavalidlink.))。
WRITETO语句总是检查用户主记录中的设置。
例如,这些设置指定是将小数点显示为句号(.),还是逗号(,)。
WRITETO语句并不遵循类型转换(页22)中所述的转换规则。
目标字段解释为类型C字段。
系统总是将源字段内容转换为类型C,它不将结果字符串转换为目标字段的数据类型,而直接写入目标字段。
因此,不应使用数值数据类型的目标字段。
DATA:
NUMBERTYPEFVALUE'4.3',
TEXT(10),
FLOATTYPEF,
PACKTYPEPDECIMALS1.
WRITENUMBER.
WRITENUMBERTOTEXTEXPONENT2.
WRITE/TEXT.
WRITENUMBERTOFLOAT.
WRITE/FLOAT.
WRITENUMBERTOPACK.
WRITE/PACK.
MOVENUMBERTOPACK.
WRITE/PACK.
该过程输出如下:
4.30000000000000E+00
0.043E+02
1.50454551753894E-153
20342<33452;30,3
4.3
第一输出行以类型F字段的标准输出格式显示字段NUMBER内容。
第二输出行显示字符串,该字符串产生于用格式化选项EXPONENT2将字段NUMBER写入长度为10的类型C字段中。
第三和第四输出行显示不适合于使用数值数据类型的目标字段。
第五输出行显示MOVE语句不同于WRITETO语句在于将类型F字段正确地转换为类型P(有关该转换的详细信息,参见源类型浮点数(页23))。
5运行时指定源字段
可以使用WRITETO语句在运行时指定源字段。
为此,请用括号将包含源字段名的数据对象名括起来,并将其放在源字段位置:
语法
WRITE(
系统将赋给
然而,如果要在运行时指定目标字段,则必须按使用字段符号中所述,使用字段符号。
DATA:
NAME(10)VALUE'SOURCE',
SOURCE(10)VALUE'Antony',
TARGET(10).
...
WRITE(NAME)TOTARGET.
WRITE:
TARGET.
则输出
Antony
字段名和字段内容之间的连接如下图所示。
5用指定偏移量写入值
可以指定每条ABAP/4语句中基本数据对象的偏移量和长度(参见指定数据对象的偏移量(页21))。
WRITETO语句语法如下:
语法
WRITE
将字段
在WRITETO语句中,目标字段的偏移量和长度指定可为变量。
SAP建议只在非数值字段之间采用偏移量和长度指定赋值。
对于数值字段,结果毫无意义。
DATA:
STRING(20),
NUMBER(8)TYPECVALUE'123456',
OFFSETTYPEIVALUE8,
LENGTHTYPEIVALUE12.
WRITENUMBER+(6)TOSTRING+OFFSET(LENGTH)LEFT-JUSTIFIED.
WRITE:
/STRING.
CLEARSTRING.
WRITENUMBER+(6)TOSTRING+OFFSET(LENGTH)CENTERED.
WRITE:
/STRING.
CLEARSTRING.
WRITENUMBERTOSTRING+OFFSET(LENGTH)RIGHT-JUSTIFIED.
WRITE:
/STRING.
CLEARSTRING.
输出为:
123456
123456
123456
第一条WRITE语句将字段NUMBER左对齐的前6个位置写入字段STRING的后12个位置。
第二条WRITE语句将NUMBER居中的前6个位置写入STRING的后12个位置。
最后,第三条WRITE语句将右对齐的NUMBER的前6个位置写入STRING的后12个位置。
6将值重置为默认值
可以用CLEAR语句重置任何数据对象值,如下所示:
语法
CLEAR
该语句将数据对象
可以区分
_基本数据类型
对于基本数据类型的数据对象的默认值列表,参见预定义的基本数据类型(页Error!
Notavalidlink.)中的表。
系统将变量值重置为它们的初始默认值,而不是用DATA语句的VALUE参数所赋的初始值。
无法重置常量。
_字段串
如果将CLEAR语句应用于字段串,则将单个组件的内容重置为它们的初始默认值。
_内表
关于CLEAR语句如何使用内表的解释,参见初始化内表(页Error!
Notavalidlink.)。
DATANUMBERTYPEIVALUE'10'.
WRITENUMBER.
CLEARNUMBER.
WRITE/NUMBER.
输出为:
10
0
CLEAR语句将字段NUMBER的内容从10重置为默认值0。
6数值运算
要处理数值数据对象并将结果值赋给数据对象,可以用COMPUTE语句或赋值运算符(=)。
COMPUTE语句语法如下所示:
语法
COMPUTE
关键字COMPUTE可选。
换句话说,该语句也可以写成:
语法
两条语句效果等同。
在
赋值运算符(=)的作用如基本赋值操作(页1)中所述。
如果运算结果与
在数学表达式中,可以按任何排列组合运算并用括号进行指定。
求值顺序是:
1.括号中的表达式
2.函数
3.**(求幂)
4.*、/、MOD、DIV(乘法、除法)
5.+、-(加法、减法)
以下主题对
处理以下数据类型特别重要:
7执行算术运算
要定义算术运算,可以使用适当的算术运算符。
使用算术运算进行
7基本算术运算
ABAP/4支持四种基本算术运算,同时还支持乘方计算。
可以用数学表达式指定以下算术运算符:
+
加法
-
减法
*
乘法
/
除法
DIV
整除
MOD
求余
**
求幂
可以用关键字ADD、SUBTRACT、MULTIPLY和DIVIDE进行基本算术运算,而不使用数学表达式中的运算符。
下表说明如何表示ABAP/4中的基本算术运算:
运算
用数学表达式的语句
用关键字的语句
加法
=
ADD
减法
=
SUBTRACT
乘法
=
MULTIPLY
除法
=
DIVIDE
整除
=
---
除法余数
=
---
求幂
=
---
在用关键字的语句中,将运算结果赋给
运算数 可以是任何数值字段。 如果字段类型不同,则系统自动进行必要类型转换(有关类型转换的详细信息,参见类型转换(页22))。 使用数学表达式时,请注意,运算符+、-、*、**、/以及前括号、后括号是ABAP/4关键字,前面和后面都必须有空格。 在除法运算中,如果被除数不为零,则除数不能为零。 对于整除,用运算符DIV或MOD代替/。 用DIV获得整数商并用MOD获得余数。 如果将几种数学表达式组合在一起,对于相同优先级的运算符,从左到右进行计算(求幂计算除外,它是从右到左进行)。 因此, 与 )相同,但与( 不同。 DATA: COUNTERTYPEI. COMPUTECOUNTER=COUNTER+1. COUNTER=COUNTER+1. ADD1TOCOUNTER. 在此,三条运算语句进行相同算术运算,例如,将1加到字段COUNTER内容上并将结果赋给COUNTER。 DATA: PACKTYPEPDECIMALS4, NTYPEFVALUE'+5.2', MTYPEFVALUE'+1.1'. PACK=N/M. WRITEPACK. PACK=NDIVM. WRITE/PACK. PACK=NMODM. WRITE/PACK. 输出为: 4.7273 4.0000 0.8000 该示例说明除法的不同类型。 8执行字段串的算术运算 类似于用MOVE-CORRESPONDING语句在字段串之间复制值(参见在字段串组件之间复制值(页3)),可以用以下关键字,执行字段串的算术运算: _ADD-CORRESPONDING _SUBTRACT-CORRESPONDING _MULTIPLY-CORRESPONDING _DIVIDE-CORRESPONDING 对于所有同名字段串组件,ABAP/4进行相应算术运算。 然而,仅当所有相关组件都是数值型数据类型时,该运算才有意义。 有关这些关键字的详细信息,参见ABAP/4关键字文档。 DATA: BEGINOFRATE, USATYPEFVALUE'0.6667', FRGTYPEFVALUE'1.0', AUTTYPEFVALUE'7.0', ENDOFRATE. DATA: BEGINOFMONEY, USATYPEIVALUE100, FRGTYPEIVALUE200, AUTTYPEIVALUE300, ENDOFMONEY. MULTIPLY-CORRESPONDINGMONEYBYRATE. WRITE/MONEY-USA. WRITE/MONEY-FRG. WRITE/MONEY-AUT. 输出如下: 67 200 2,100 在此,用RATE-USA乘以MONEY-USA,以此类推。 9添加字段顺序 除基本算术运算(页7)中所述的基本加法之外,ADD语句有几个变体,用于添加字段顺序。 例如: _添加字段顺序并将结果赋给另一个字段 语法 ADD 如果 _添加字段顺序并将结果添加到另一个字段的内容中 语法 ADD 该语句除了将字段总和添加到 有关其它相似变体的信息,参见有关ADD语句的关键字文档。 DATA: BEGINOFSERIES, N1TYPEIVALUE10, N2TYPEIVALUE20, N3TYPEIVALUE30, N4TYPEIVALUE40, N5TYPEIVALUE50, N6TYPEIVALUE60, ENDOFSERIES. DATASUMTYPEI. ADDSERIES-N1THENSERIES-N2UNTILSERIES-N5GIVINGSUM. WRITESUM. ADDSERIES-N2THENSERIES-N3UNTILSERIES-N6TOSUM. WRITE/SUM. 输出如下: 150 350 在此,将N1到N5组件内容求和并将其值赋给字段S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SAP ABAP4 语言 中文 培训教材 第一 部分 第六 处理 数据