第006章 处理数据

发布时间 : 星期日 文章第006章 处理数据更新完毕开始阅读

9 语法

ADD THEN UNTIL GIVING .

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

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

语法

ADD THEN UNTIL TO .

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

有关其它相 似变体的信 息,参见有 关 ADD 语句的关键 字文档。 DATA: BEGIN OF SERIES, N1 TYPE I VALUE 10, N2 TYPE I VALUE 20, N3 TYPE I VALUE 30, N4 TYPE I VALUE 40, N5 TYPE I VALUE 50, N6 TYPE I VALUE 60, END OF SERIES. DATA SUM TYPE I. ADD SERIES-N1 THEN SERIES-N2 UNTIL SERIES-N5 GIVING SUM. WRITE SUM. ADD SERIES-N2 THEN SERIES-N3 UNTIL SERIES-N6 TO SUM. WRITE / SUM. 输出如下: 150 350 在此,将 N1 到 N5 组件内容求 和并将其值 赋给字段 SUM。然 后,将 N2 到 N6组件求 和并将其添 加到 SUM 的值中。

使用数学函 数

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

[COMPUTE] = ( ). 在括号之间 的空格和参 数 是必须的。

将调用的参 数为 的函数 结果赋给 。 在以下主题 中描述可用 函数:

所有数值数 据类型的函 数

以下内部函 数使用所有 三种数值数 据类型(F、 I 和 P)作为参 数。

所有数值数 据类型的函 数 函数 ABS SIGN 结果 参 数的绝对值 。 参 数符号: 1 X > 0 SIGN( X) = 0 if X = 0 -1 X < 0 不 小于参数的 最小整数值 。 不 大于参数的 最大整数值 。 参 数的整数部 分。 CEIL FLOOR TRUNC 10 FRAC

参 数的分数部 分。 DATA N TYPE P DECIMALS 2. DATA M TYPE P DECIMALS 2 VALUE '-5.55'. N = ABS( M ). WRITE: 'ABS: ', N. N = SIGN( M ). WRITE: / 'SIGN: ', N. N = CEIL( M ). WRITE: / 'CEIL: ', N. N = FLOOR( M ). WRITE: / 'FLOOR:', N. N = TRUNC( M ). WRITE: / 'TRUNC:', N. N = FRAC( M ). WRITE: / 'FRAC: ', N. 输出如下: ABS: 5.55 SIGN: 1.00- CEIL: 5.00- FLOOR: 6.00- TRUNC: 5.00- FRAC: 0.55- 这些函数的 参数不必为 数值数据类 型。如果选 择其它类型 ,则被转换 为数值类型 。然而,由 于性能原因 ,应尽可能 使用正确类 型。 DATA: T1(10), T2(10) VALUE '-100'. T1 = ABS( T2 ). WRITE T1. 输出为: 100 执行了两种 转换。首先 ,将类型 C 字段的内容 T2 转换为类型 P 并且系统用 转换结果处 理函数 ABS。然 后,在类型 C 字段 T1 的赋值期间 ,将函数结 果转换回类 型 C。 浮点函数

以下内部函 数用浮点数 据类型(F) 作为参数。

浮点数据类 型的函数

函数 ACOS、 ASIN、 ATAN; COS、SIN、 TAN COSH、 SINH、 TANH EXP LOG LOG10 解释 三角函数。 反三角函数 。 基 数为 e 的求幂函数 (e=2.7182818285) 。 基 数为 e 的自然对数 。 基 数为 10 的对数。 SQRT 平 方根。 对于 所有函数, 正常数学约 束(例如 平方根只适 用于正数) 适用。否则 ,会产生运 行错误。 11 这些函数的 参数不必为 浮点数。如 果选择其它 类型,则被 转化为类型 F,如类型转换 (页 22) 中所 述。 DATA: RESULT TYPE F, PI(10) VALUE '3.141592654'. RESULT = COS( PI ). WRITE RESULT. 输出为 -1.00000000000000E+00。 在进行计算 之前,自动 将字符字段 PI 转换为类型 F 字段。 处理压缩数

如果未设置 程序属性“ 定点算法” ,则将类型 P 字段解释为 无小数位的 正数。DATA 语句的参数 DECIMALS 只影响 WRITE 输出的格式 。

因此,SAP 建议在使用 类型 P 字段时,总 是设置程序 属性“定点 算法”(参 见指定程序属性 (页 错误!链接无效。) )。

然后,在将 类型 P 字段输出到 输出列表中 时,关键字 DECIMALS 不仅指小数 点位置,而 且考虑算术 运算中的小 数位。 对于中间结 果,ABAP/4 计算不超过 31 位(在小数 点之前和之 后)。如果 设置“定点 算法”,则 ABAP/4 中对于压缩 数的计算与 袖珍计算器 计算方式相 同。 DATA: P TYPE P. P = 1 / 3 * 3. WRITE P. 如果未设置 程序属性“ 定点算法” ,则结果为 0,这是因 为除法结果 被内部取整 为 0。 如果设置程 序属性“定 点算法”, 则结果为 1,这是因 为除法结果 被内部存储 0.333333333333333333333333333333, 精度达 31 位数字。 处理日期和 时间字段

日期和时间 字段数据类 型不是数值 型。但是, 由于进行自 动类型转换 ,可以采用 类似于数值 型字段的处 理方法,处 理日期和时 间字段(参 见基本数据类 型的可转换 性 (页 22) )

在处理日期 和时间字段 时,使用偏 移量指定常 常十分有用 (参见指定数据对 象的偏移量 (页 21) )。

DATA: ULTIMO TYPE D. ULTIMO = SY-DATUM. ULTIMO+6(2) = '01'. \ ULTIMO = ULTIMO - 1. \在此,将上 月的最后一 天赋给日期 字段 ULTIMO。 为此: 1. 用当 前日期填充 ULTIMO。 2. 用指 定偏移量, 将日期更改 为当前月的 第一天。 3. 从 ULTIMO 减1,将其 内容更改为 上月的最后 一天。在进 行减法之前 ,系统将 ULTIMO 转换为从 01.01.0001 起的天数并 将结果转换 为日期。 12 DATA: DIFF TYPE I, SECONDS TYPE I, HOURS TYPE I. DATA: T1 TYPE T VALUE '200000', T2 TYPE T VALUE '020000'. DIFF = T2 - T1. SECONDS = DIFF MOD 86400. HOURS = SECONDS / 3600. 最后三行可 由以下行替 换 HOURS = ( ( T2 - T1 ) MOD 86400 ) / 3600. 计算 02:00:00 和 20:00:00 之间的小时 数。 首先,计算 时间字段之 差,结果为 -64800。 这是因为 T1 被内部转换 为 72000, T2 被内部转换 为 7200。 其次,借助 运算 MOD,将 该负差转换 为总的秒数 。请注意, 如果该差为 正数,则进 行 MOD 运算后结果 保持不变。 第三、将秒 数除以 3600, 计算小时数 。 在某些情况 下(例如按 递减顺序对 日期进行排 序),用关 键字 CONVERT 将日期从格 式 D 转换为相反 日期非常有 用。

语法

CONVERT DATE INTO INVERTED-DATE . CONVERT INVERTED-DATE INTO DATE .

这些语句将 字段 从格式 DATE 或 INVERTED-DATE 转换为格式 INVERTED-DATE 或 DATE 并将其赋给

对于该转换 , ABAP/4 形成 9 的补数。 DATA: ODATE TYPE D VALUE '19955011', IDATE LIKE ODATE. DATA FIELD(8). FIELD = ODATE. WRITE / FIELD. CONVERT DATE ODATE INTO INVERTED-DATE IDATE. FIELD = IDATE. WRITE / FIELD. CONVERT INVERTED-DATE IDATE INTO DATE ODATE. FIELD = ODATE. WRITE / FIELD. 输出如下: 19955011 80049488 19955011

处理字符串

ABAP/4 提供多个处 理类型 C 的数据对象 的关键字, 即字符串。 在字符串运 算期间,系 统不进行类 型转换。用 下述主题中 所述的字符 串处理关键 字,系统将 所有运算数 都当作类型 C 字段,而不 考虑它们的 实际类型。 处理字符串 的方法有:

联系合同范文客服:xxxxx#qq.com(#替换为@)