第006章 处理数据.docx

上传人:b****8 文档编号:9182349 上传时间:2023-02-03 格式:DOCX 页数:49 大小:44.15KB
下载 相关 举报
第006章 处理数据.docx_第1页
第1页 / 共49页
第006章 处理数据.docx_第2页
第2页 / 共49页
第006章 处理数据.docx_第3页
第3页 / 共49页
第006章 处理数据.docx_第4页
第4页 / 共49页
第006章 处理数据.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

第006章 处理数据.docx

《第006章 处理数据.docx》由会员分享,可在线阅读,更多相关《第006章 处理数据.docx(49页珍藏版)》请在冰豆网上搜索。

第006章 处理数据.docx

第006章处理数据

第六章1处理数据

概览

内容

赋值

用MOVE赋值

用WRITETO赋值

将值重置为默认值

数值运算

执行算术运算

使用数学函数

处理压缩数

处理日期和时间字段

处理字符串

移动字段内容

替换字段内容

转换大/小写并替换字符

转换为可排序格式

覆盖字符字段

搜索字符串

获得字符串长度

压缩字段内容

连接字符串

拆分字符串

分配字符串部分

指定数据对象的偏移量

类型转换

基本数据类型的可转换性

字段串的可转换性

内表的可转换性

对齐数据对象

本节描述如何使用(处理)数据对象。

涉及到以下主题:

1赋值

在ABAP/4中,可以在声明语句和操作语句中给数据对象赋值。

在声明语句中,将初始值赋给声明的数据对象。

为此,可以在DATA、常量或STATICS语句中使用VALUE参数(参见创建数据对象和数据类型(页3–12))。

要在操作语句中给数据对象赋值,可以使用:

_MOVE语句,对应于赋值运算符(=)

_WRITETO语句

 

本节提到的大多数操作不仅适用于程序中的内部字段,而且适用于程序参数、表工作区、系统字段、字段符号和形式参数,以及不更改数据对象情况下的常量和文字。

当讨论有关字段的操作时,参照相对于一般字段,而并非仅是内部字段。

1用MOVE赋值

本节主题描述如何使用MOVE语句或赋值运算符(=)。

其中包括:

1基本赋值操作

要将值(文字)或源字段的内容赋给目标字段,可以使用MOVE语句或赋值运算符(=)。

MOVE语句的语法如下所示:

语法

MOVETO.

MOVE语句将源字段的内容传送给目标字段

可以是任何数据对象。

必须是变量,不能是文字或常量。

传送后,的内容保持不变。

赋值运算符(=)的语法如下所示:

语法

=.

MOVE语句和赋值运算符功能相同。

如下所示,可以多重赋值:

===

ABAP/4按从右到左的顺序进行处理,如下所示:

MOVETO.

MOVETO.

MOVETO.

在以上语句中,不管用户主记录如何,小数点必须用句点(.)指定。

源字段和目标字段可以是不同数据类型。

其它程序设计语言通常将不同数据类型之间的赋值限制在少数可能组合之内,而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[+][()]TO[+][()].

赋值运算符语法如下:

语法

[+][()]=[+][()]。

将字段+1位置开始且长度为的段内容赋给字段,覆盖从+1位置开始且长度为的段。

在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-CORRESPONDINGTO.

该语句将字段串组件的内容赋给有相同名称的字段串组件。

对于每对名称,系统都执行MOVE语句,如下所示:

MOVESTRING1-TOSTRING2-.

系统分别执行所有必要类型转换。

该处理不同于包括整个字段串的赋值。

在这种情况下,应用不兼容的字段串和基本字段(页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语句(页4–1))。

本节主题描述

4WRITETO语句的基本形式

要将值(文字)或源字段内容写入目标字段,可以使用WRITETO语句:

语法

WRITETO[

WRITETO语句将源字段内容写入目标字段

可以是任何数据对象。

必须是变量,不能是文字或常量。

写入后,内容保持不变。

对于

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()TO.

系统将赋给的数据对象值放到中。

然而,如果要在运行时指定目标字段,则必须按使用字段符号中所述,使用字段符号。

DATA:

NAME(10)VALUE'SOURCE',

SOURCE(10)VALUE'Antony',

TARGET(10).

...

WRITE(NAME)TOTARGET.

WRITE:

TARGET.

则输出

Antony

字段名和字段内容之间的连接如下图所示。

 

5用指定偏移量写入值

可以指定每条ABAP/4语句中基本数据对象的偏移量和长度(参见指定数据对象的偏移量(页21))。

WRITETO语句语法如下:

语法

WRITE[+][()]TO[+][()].

将字段中从+1位置开始且长度为的内容赋给字段,覆盖从+1位置开始且长度为的段。

在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.

该语句将数据对象的内容重置为初始默认值。

可以区分

_基本数据类型

对于基本数据类型的数据对象的默认值列表,参见预定义的基本数据类型(页3–3)中的表。

系统将变量值重置为它们的初始默认值,而不是用DATA语句的VALUE参数所赋的初始值。

无法重置常量。

_字段串

如果将CLEAR语句应用于字段串,则将单个组件的内容重置为它们的初始默认值。

_内表

关于CLEAR语句如何使用内表的解释,参见初始化内表(页Error!

Notavalidlink.)。

DATANUMBERTYPEIVALUE'10'.

WRITENUMBER.

CLEARNUMBER.

WRITE/NUMBER.

输出为:

10

0

CLEAR语句将字段NUMBER的内容从10重置为默认值0。

6数值运算

要处理数值数据对象并将结果值赋给数据对象,可以用COMPUTE语句或赋值运算符(=)。

COMPUTE语句语法如下所示:

语法

COMPUTE=.

关键字COMPUTE可选。

换句话说,该语句也可以写成:

语法

=.

两条语句效果等同。

中指定的数学运算结果赋给字段

赋值运算符(=)的作用如基本赋值操作(页1)中所述。

如果运算结果与的数据类型不同,则系统自动进行类型转换(参见类型转换(页22))。

在数学表达式中,可以按任何排列组合运算并用括号进行指定。

求值顺序是:

1.括号中的表达式

2.函数

3.**(求幂)

4.*、/、MOD、DIV(乘法、除法)

5.+、-(加法、减法)

以下主题对中指定的数学运算加以描述:

处理以下数据类型特别重要:

7执行算术运算

要定义算术运算,可以使用适当的算术运算符。

使用算术运算进行

7基本算术运算

ABAP/4支持四种基本算术运算,同时还支持乘方计算。

可以用数学表达式指定以下算术运算符:

+

加法

-

减法

*

乘法

/

除法

DIV

整除

MOD

求余

**

求幂

可以用关键字ADD、SUBTRACT、MULTIPLY和DIVIDE进行基本算术运算,而不使用数学表达式中的运算符。

下表说明如何表示ABAP/4中的基本算术运算:

运算

用数学表达式的语句

用关键字的语句

加法

=+.

ADDTO.

减法

=-.

SUBTRACTFROM.

乘法

=*.

MULTIPLYBY.

除法

=/.

DIVIDEBY.

整除

=DIV.

---

除法余数

=MOD.

---

求幂

=**.

---

在用关键字的语句中,将运算结果赋给

运算数

可以是任何数值字段。

如果字段类型不同,则系统自动进行必要类型转换(有关类型转换的详细信息,参见类型转换(页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语句有几个变体,用于添加字段顺序。

例如:

_添加字段顺序并将结果赋给另一个字段

语法

ADDTHENUNTILGIVING.

如果、...、是在内存中相同类型和长度的等距字段序列,则进行求和计算并将结果赋给

_添加字段顺序并将结果添加到另一个字段的内容中

语法

ADDTHENUNTILTO.

该语句除了将字段总和添加到的旧内容中之外,与上面语句的工作方式相同。

有关其它相似变体的信息,参见有关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组件内容求和并将其值赋给字段SUM。

然后,将N2到N6组件求和并将其添加到SUM的值中。

9使用数学函数

要指定数学表达式,可以从ABAP/4内部函数集中选择运算。

语法

[COMPUTE]

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1