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
MOVE 语句将源字 段
语法
MOVE 语句和赋值 运算符功能 相同。 如下所示, 可以多重赋 值:
ABAP/4 按从右到左 的顺序进行 处理,如下 所示: MOVE
例如,可以 将基本数据 类型的源字 段内容赋给 其它基本数 据类型的目 标字段(除 了数据类型 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
语法
将字段
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
该语句将字 段串
MOVE STRING1-
系统分别执 行所有必要 类型转换。 该处理不同 于包括整个 字段串的赋 值。在这种 情况下,应 用不兼容的字 段串和基本 字段 (页 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
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) ) 。