第006章 处理数据 下载本文

1 第六章 处理数据 概览

内容

赋值 ................................................................................................................................................................... 1

用 MOVE 赋值 ......................................................................................................................................... 1 用 WRITE TO 赋值 ................................................................................................................................. 4 将值重置为 默认值 ......................................................................................................................................... 6 数值运算 ........................................................................................................................................................... 6

执行算术运 算 ........................................................................................................................................... 7 使用数学函 数 ........................................................................................................................................... 9 处理压缩数 ............................................................................................................................................. 11 处理日期和 时间字段 ........................................................................................................................... 11 处理字符串 ................................................................................................................................................... 12

移动字段内 容 ....................................................................................................................................... 13 替换字段内 容 ....................................................................................................................................... 14 转换大/小 写并替换字 符 .................................................................................................................... 15 转换为可排 序格式 ............................................................................................................................... 16 覆盖字符字 段 ....................................................................................................................................... 16 搜索字符串 ............................................................................................................................................. 17 获得字符串 长度 ................................................................................................................................... 18 压缩字段内 容 ....................................................................................................................................... 19 连接字符串 ............................................................................................................................................. 19 拆分字符串 ............................................................................................................................................. 20 分配字符串 部分 ................................................................................................................................... 21 指定数据对 象的偏移量 ............................................................................................................................. 21 类型转换 ....................................................................................................................................................... 22

基本数据类 型的可转换 性 ................................................................................................................. 22 字段串的可 转换性 ............................................................................................................................... 25 内表的可转 换性 ................................................................................................................................... 26 对齐数据对 象 ....................................................................................................................................... 26

本节描述如 何使用(处 理)数据对 象。涉及到 以下主题:

赋值

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

在声明语句 中,将初始 值赋给声明 的数据对象 。为此,可 以在 DATA、 常量或 STATICS 语句中使用 VALUE 参数(参见 创建数据对象和数据类型 (页 错误!链接无效。) ) 。 要在操作语 句中给数据 对象赋值, 可以使用:

MOVE 语句,对应 于赋值运算 符(=) WRITE TO 语句

本节提到的 大多数操作 不仅适用于 程序中的内 部字段,而 且适用于程 序参数、表 工作区、系 统字段、字 段符号和形 式参数,以 及不更改数 据对象情况 下的常量和 文字。当讨 论有关字段 的操作时, 参照相对于 一般字段, 而并非仅是 内部字段。

用 MOVE 赋值

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

基本赋值操 作

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

2 语法

MOVE TO .

MOVE 语句将源字 段 的内容传送 给目标字段 可 以是任何数 据对象。 必须是变量 ,不能是文 字或常量。 传送后, 的内容保持 不变。 赋值运算符 (=)的语 法如下所示 :

语法

= .

MOVE 语句和赋值 运算符功能 相同。 如下所示, 可以多重赋 值:

= = =

ABAP/4 按从右到左 的顺序进行 处理,如下 所示: MOVE TO . MOVE TO . MOVE TO . 在以上语句 中,不管用 户主记录如 何,小数点 必须用句点 (.)指定 。 源字段和目 标字段可以 是不同数据 类型。其它 程序设计语 言通常将不 同数据类型 之间的赋值 限制在少数 可能组合之 内,而 ABAP/4 则提供大量 自动类型转 换。

例如,可以 将基本数据 类型的源字 段内容赋给 其它基本数 据类型的目 标字段(除 了数据类型 D 无法赋给数 据类型 T,反之亦 然)。ABAP/4 也支持结构 化数据和基 本数据对象 之间或结构 不同的数据 对象之间的 赋值。

对于每一赋 值语句(用 MOVE 或赋值运算 符),系统 都检查源字 段和目标字 段的数据类 型。如果定 义了此类组 合的类型转 换,则将源 字段内容转 换为目标字 段数据类型 并将其值赋 给目标字段 。要获得可 能数据类型 转换的综述 以及在 ABAP/4 中是如何定 义的等信息 ,请参见类型转换 (页 22) 。 DATA: T(10), NUMBER TYPE P DECIMALS 1, COUNT TYPE P DECIMALS 1. T = 1111. MOVE '5.3' TO NUMBER. COUNT = NUMBER. 赋值结果是 字段T、NUMBER 和 COUNT 分别包含值 ‘1111 ’、5.3 和 5.3。请 注意,当赋 值数值 1111 时,系统将 它转换为长 度为 10 的字符串。 要在运行时 指定源字段 和目标字段 ,必须按使用字段符号所 述,使用字 段符号。因 此无法使用 MOVE 语句(或赋 值运算符) 。

用指定偏移 量赋值

可以在每条 ABAP/4 语句中为基 本数据类型 指定偏移量 和长度(参 见指定数据对 象的偏移量 (页 21) )。在这 种情况下, MOVE 语句语法如 下: 语法

MOVE [+][()] TO [+][()]. 赋值运算符 语法如下:

语法

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

将字段 +1 位置开始且 长度为 的段内容赋 给字段 ,覆盖从 +1 位置开始且 长度为 的段。 在 MOVE 语句中,所 有偏移量和 长度指定都 可为变量。 这同样适用 于采用赋值 运算符的语 句,只要也 可以写做 MOVE 语句。在赋 值运算符之 后未指定字 段名称的语 句中,(例 如在数学表 达式中), 所有偏移量 和长度指定 都必须是无 符号数值。 详细信息, 参见数值运算 (页 6) )。 SAP 建议只在非 数值字段之 间才采用指 定偏移量和 长度赋值。 对于数值字 段,结果毫 无意义。

3 DATA: F1(8) VALUE 'ABCDEFGH', F2(20). F2+6(5) = F1+3(5). 在该示例中 ,赋值运算 符功能如下 : DATA: F1(8) VALUE 'ABCDEFGH', F2(8). DATA: O TYPE I VALUE 2, L TYPE I VALUE 4. MOVE F1 TO F2. WRITE F2. MOVE F1+O(L) TO F2. WRITE / F2. MOVE F1 TO F2+O(L). WRITE / F2. CLEAR F2. MOVE F1 TO F2+O(L). WRITE / F2. MOVE F1+O(L) TO F2+O(L). WRITE / F2. 该过程输出 如下: ABCDEFGH CDEF CDABCD ABCD CDEF 首先,未指 定偏移量将 F1 内容赋给 F2。然后 ,再指定偏 移量和长度 执行同样操 作。后面三 条 MOVE 语句覆盖偏 移量为2. 的 F2 内容。请注 意,根据 源类型字符 (页 23) 中的规则, F2 的右边用空 格填充。

在字段串组 件之间复制 值

描述的 MOVE 语句赋值方 法适用于基 本数据对象 和结构化数 据对象。另 外,还有一 种 MOVE 语句变体, 允许将源字 段串组件内 容复制到目 标字段串组 件中。语法 如下:

语法

MOVE-CORRESPONDING TO .

该语句将字 段串 组件的内容 赋给有相同 名称的字段 串 组件。 对于每对名 称,系统都 执行 MOVE 语句,如下 所示:

MOVE STRING1- TO STRING2-.

系统分别执 行所有必要 类型转换。 该处理不同 于包括整个 字段串的赋 值。在这种 情况下,应 用不兼容的字 段串和基本 字段 (页 25) 所述的转 换规则。 DATA: BEGIN OF ADDRESS, FIRSTNAME(20) VALUE 'Fred', SURNAME(20) VALUE 'Flintstone', INITIALS(4) VALUE 'FF', STREET(20) VALUE 'Cave Avenue, NUMBER TYPE I VALUE '11'. POSTCODE TYPE N VALUE '98765'. CITY(20) VALUE 'Bedrock', END OF ADDRESS. DATA: BEGIN OF NAME, SURNAME(20), FIRSTNAME(20), INITIALS(4), 4 TITLE(10) VALUE 'Mister', END OF NAME. MOVE CORRESPONDING ADDRESS TO NAME. 在该示例中 ,将 NAME-SURNAME、 NAME-FIRSTNAME 和 NAME-INITIALS之 值设置为 Flintstone、 Fred 和 FF。NAME-TITLE 仍为值 Mister。

用 WRITE TO 赋值

用 WRITE TO 给数据对象 赋值时,可 以用 WRITE 语句的格式 化选项(参 见WRITE 语句 (页 错误!链接无效。) )。 本节主题描 述

WRITE TO 语句的基本 形式

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

语法

WRITE TO [

WRITE TO 语句将源字 段 内容写入目 标字段 可以是任何 数据对象。 必 须是变量, 不能是文字 或常量。写 入后, 内容保持不 变。

对于

WRITE TO 语句总是检 查用户主记 录中的设置 。例如,这 些设置指定 是将小数点 显示为句号 (.),还 是逗号(,) 。

WRITE TO 语句并不遵 循 类型转换 (页 22) 中所述的转 换规则。目 标字段解释 为类型 C 字段。系统 总是将源字 段内容转换 为类型 C,它不将 结果字符串 转换为目标 字段的数据 类型,而直 接写入目标 字段。因此 ,不应使用 数值数据类 型的目标字 段。 DATA: NUMBER TYPE F VALUE '4.3', TEXT(10), FLOAT TYPE F, PACK TYPE P DECIMALS 1. WRITE NUMBER. WRITE NUMBER TO TEXT EXPONENT 2. WRITE / TEXT. WRITE NUMBER TO FLOAT. WRITE / FLOAT. WRITE NUMBER TO PACK. WRITE / PACK. MOVE NUMBER TO PACK. WRITE / PACK. 该过程输出 如下: 4.30000000000000E+00 0.043E+02 1.50454551753894E-153 20342<33452;30,3 4.3 第一输出行 以类型 F 字段的标准 输出格式显 示字段 NUMBER 内容。第二 输出行显示 字符串,该 字符串产生 于用格式化 选项 EXPONENT 2 将字段 NUMBER 写入长度为 10 的类型 C 字段中。第 三和第四输 出行显示不 适合于使用 数值数据类 型的目标字 段。第五输 出行显示 MOVE 语句不同于 WRITE TO 语句在于将 类型F 字段正确地 转换为类型 P (有关该转 换的详细信 息,参见源类型浮点 数 (页 23) ) 。