ABAP 基础语法教程:运算、字符串、判断与循环


文章封面

ABAP 基础语法教程:运算、字符串、判断与循环

ABAP 是 SAP 系统中最常见的开发语言之一。刚开始学习 ABAP 时,建议先掌握四类高频基础语法:数值运算、字符串处理、条件控制和循环控制。

本文按照博客教程的风格,把这些语法放在一起整理,并配上可以直接复制练习的示例代码。

一、加减乘除运算

ABAP 中常见的数学运算符如下:

运算符号示例
加法+lv_a + lv_b
减法-lv_a - lv_b
乘法*lv_a * lv_b
除法/lv_a / lv_b
整除DIVlv_a DIV lv_b
取余MODlv_a MOD lv_b

示例代码:

DATA: lv_a      TYPE i VALUE 10,
      lv_b      TYPE i VALUE 3,
      lv_result TYPE i.

lv_result = lv_a + lv_b.
WRITE: / '加法:', lv_result.

lv_result = lv_a - lv_b.
WRITE: / '减法:', lv_result.

lv_result = lv_a * lv_b.
WRITE: / '乘法:', lv_result.

lv_result = lv_a / lv_b.
WRITE: / '除法:', lv_result.

lv_result = lv_a DIV lv_b.
WRITE: / '整除:', lv_result.

lv_result = lv_a MOD lv_b.
WRITE: / '取余:', lv_result.

早期 ABAP 代码中也会看到 COMPUTE 写法:

COMPUTE lv_result = lv_a + lv_b.

现在更常见的是直接使用赋值表达式:

lv_result = lv_a + lv_b.

二、字符串运算

ABAP 业务程序中经常需要处理字符串,例如拼接单号、拆分编码、判断文本中是否包含关键字,以及替换指定内容。

1. CONCATENATE:字符串拼接

CONCATENATE 用于把多个字符串拼接成一个字符串。

DATA: lv_first  TYPE string VALUE 'SAP',
      lv_second TYPE string VALUE 'ABAP',
      lv_text   TYPE string.

CONCATENATE lv_first lv_second INTO lv_text.
WRITE: / lv_text.

输出结果:

SAPABAP

如果希望中间带空格,可以使用 SEPARATED BY

CONCATENATE lv_first lv_second INTO lv_text SEPARATED BY space.
WRITE: / lv_text.

输出结果:

SAP ABAP

也可以使用其他分隔符:

CONCATENATE lv_first lv_second INTO lv_text SEPARATED BY '-'.

2. SPLIT:字符串拆分

SPLIT 用于按照指定分隔符拆分字符串。

DATA: lv_fullname TYPE string VALUE 'SAP-ABAP-HANA',
      lv_part1    TYPE string,
      lv_part2    TYPE string,
      lv_part3    TYPE string.

SPLIT lv_fullname AT '-' INTO lv_part1 lv_part2 lv_part3.

WRITE: / lv_part1.
WRITE: / lv_part2.
WRITE: / lv_part3.

输出结果:

SAP
ABAP
HANA

如果拆分后的数量不固定,可以拆分到内表:

DATA: lv_text  TYPE string VALUE 'A,B,C,D',
      lt_parts TYPE TABLE OF string.

SPLIT lv_text AT ',' INTO TABLE lt_parts.

SEARCH 用于查找字符串中是否包含某个内容。

DATA lv_text TYPE string VALUE 'Hello ABAP World'.

SEARCH lv_text FOR 'ABAP'.

IF sy-subrc = 0.
  WRITE: / '找到了,位置:', sy-fdpos.
ELSE.
  WRITE: / '没有找到'.
ENDIF.

常用系统字段说明:

系统字段含义
sy-subrc = 0找到内容
sy-subrc <> 0未找到
sy-fdpos找到的位置

现代 ABAP 中也经常使用 FIND,但在很多历史代码和项目代码中,SEARCH 仍然很常见。

4. REPLACE:字符串替换

REPLACE 用于替换字符串中的内容。

DATA lv_text TYPE string VALUE 'Hello ABAP'.

REPLACE 'ABAP' IN lv_text WITH 'SAP'.

WRITE: / lv_text.

输出结果:

Hello SAP

如果要替换所有匹配项,可以使用 ALL OCCURRENCES OF

DATA lv_text TYPE string VALUE 'ABAP is good. ABAP is powerful.'.

REPLACE ALL OCCURRENCES OF 'ABAP' IN lv_text WITH 'SAP'.

WRITE: / lv_text.

输出结果:

SAP is good. SAP is powerful.

三、控制语句

控制语句用于根据条件决定代码是否执行,常见的有 IFCASE ... WHEN

1. IF 判断

IF 是最常用的条件判断语句。

IF 条件.
  " 条件成立时执行
ELSEIF 其他条件.
  " 其他条件成立时执行
ELSE.
  " 以上条件都不成立时执行
ENDIF.

示例代码:

DATA lv_score TYPE i VALUE 85.

IF lv_score >= 90.
  WRITE: / '优秀'.
ELSEIF lv_score >= 60.
  WRITE: / '及格'.
ELSE.
  WRITE: / '不及格'.
ENDIF.

常见比较符:

符号含义
=等于
<>不等于
>大于
<小于
>=大于等于
<=小于等于

也可以组合多个条件:

IF lv_score >= 60 AND lv_score < 90.
  WRITE: / '成绩合格'.
ENDIF.

2. CASE WHEN 判断

ABAP 程序控制语句中常见写法是 CASE ... WHEN ... ENDCASE

DATA lv_type TYPE c VALUE 'A'.

CASE lv_type.
  WHEN 'A'.
    WRITE: / '类型 A'.
  WHEN 'B'.
    WRITE: / '类型 B'.
  WHEN 'C'.
    WRITE: / '类型 C'.
  WHEN OTHERS.
    WRITE: / '其他类型'.
ENDCASE.

需要注意:很多人会习惯说“CASE WHEN”,但在普通 ABAP 控制流里,完整结构通常是:

CASE 变量.
  WHEN 值.
    " 执行逻辑
ENDCASE.

CASE WHEN 表达式更多出现在 Open SQL 或表达式场景中。

四、循环语句

循环语句用于重复执行一段逻辑。这里重点看 DO,以及循环中经常配合使用的 CONTINUECHECKEXIT

1. DO 循环

DO 可以按固定次数循环。

DO 5 TIMES.
  WRITE: / '当前循环次数:', sy-index.
ENDDO.

sy-index 表示当前循环次数,从 1 开始。

也可以写不指定次数的循环,但通常要配合 EXIT,避免无限循环:

DATA lv_count TYPE i VALUE 0.

DO.
  lv_count = lv_count + 1.
  WRITE: / lv_count.

  IF lv_count >= 5.
    EXIT.
  ENDIF.
ENDDO.

2. CONTINUE:跳过本次循环

CONTINUE 用于跳过当前循环,直接进入下一次循环。

DO 5 TIMES.
  IF sy-index = 3.
    CONTINUE.
  ENDIF.

  WRITE: / '当前次数:', sy-index.
ENDDO.

这段代码会跳过第 3 次输出。

3. CHECK:条件不满足时跳过

CHECK 可以理解为“条件检查”。在循环中,如果条件不成立,则跳过当前循环。

DO 5 TIMES.
  CHECK sy-index >= 3.

  WRITE: / '当前次数:', sy-index.
ENDDO.

输出结果:

当前次数: 3
当前次数: 4
当前次数: 5

在循环中:

CHECK 条件.

可以大致理解为:

IF 条件不成立.
  CONTINUE.
ENDIF.

4. EXIT:退出循环

EXIT 用于直接结束当前循环。

DO 10 TIMES.
  IF sy-index = 4.
    EXIT.
  ENDIF.

  WRITE: / '当前次数:', sy-index.
ENDDO.

输出结果:

当前次数: 1
当前次数: 2
当前次数: 3

sy-index = 4 时,循环直接结束。

五、完整练习示例

下面把运算、字符串、判断和循环放到一个完整示例中,适合直接新建一个测试报表进行练习。

REPORT z_abap_basic_demo.

DATA: lv_a      TYPE i VALUE 10,
      lv_b      TYPE i VALUE 2,
      lv_result TYPE i,
      lv_text   TYPE string,
      lv_name   TYPE string VALUE 'SAP-ABAP-HANA',
      lv_part1  TYPE string,
      lv_part2  TYPE string,
      lv_part3  TYPE string.

" 数值运算
lv_result = lv_a + lv_b.
WRITE: / '加法结果:', lv_result.

lv_result = lv_a * lv_b.
WRITE: / '乘法结果:', lv_result.

" 字符串拼接
CONCATENATE 'Hello' 'ABAP' INTO lv_text SEPARATED BY space.
WRITE: / lv_text.

" 字符串拆分
SPLIT lv_name AT '-' INTO lv_part1 lv_part2 lv_part3.
WRITE: / lv_part1, lv_part2, lv_part3.

" 字符串查找
SEARCH lv_text FOR 'ABAP'.
IF sy-subrc = 0.
  WRITE: / '找到 ABAP,位置:', sy-fdpos.
ENDIF.

" 字符串替换
REPLACE 'ABAP' IN lv_text WITH 'SAP'.
WRITE: / lv_text.

" CASE 判断
CASE lv_part2.
  WHEN 'ABAP'.
    WRITE: / '这是 ABAP 内容'.
  WHEN OTHERS.
    WRITE: / '其他内容'.
ENDCASE.

" DO 循环
DO 5 TIMES.
  IF sy-index = 2.
    CONTINUE.
  ENDIF.

  IF sy-index = 5.
    EXIT.
  ENDIF.

  WRITE: / '循环次数:', sy-index.
ENDDO.

六、小结

本文整理的内容可以作为 ABAP 入门阶段的基础语法清单:

类型常用语法
运算+-*/DIVMOD
拼接CONCATENATE ... INTO ...
拆分SPLIT ... AT ... INTO ...
查找SEARCH ... FOR ...
替换REPLACE ... IN ... WITH ...
判断IF ... ELSEIF ... ELSE ... ENDIF
分支CASE ... WHEN ... ENDCASE
循环DO ... ENDDO
跳过CONTINUECHECK
退出EXIT

这些语法是编写 ABAP 报表、增强、接口程序时最常用的基础能力。掌握之后,再继续学习内表、结构、SELECT 查询和 ALV 展示,会顺畅很多。

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
MCP自动发表文章
评论列表

发表评论

评论内容
昵称:
验证码:
验证码
关联文章

ABAP 基础语法教程运算字符串判断循环
ABAP基础语法:变量、系统变量、数据类型结构体变量详解
SAP ABAP 数据类型和常量基础
二进制二进制运算
C#的进化——C#发展史、C#1.0-10.0语法系统性梳理、C#JAVA的对比
.NET C#教程初级篇 1-1 基本数据类型及其存储方式
ABAP 数据字典 DDIC 详解:从 Domain 到透明表、搜索帮助锁对象
JavaScript JS高精度计算方法库推荐,数值运算误差
Epicor判断当前是否正在进行MRP运算
SAP S/4HANA FICO 入门 58:印度 GST 基础配置 Business Place
C#基础系列-过滤器特性
Linq to SQL语句基础讲解
66. SAP S/4HANA EWM 入门:仓库结构、基础流程企业组织定义
C# 数据库连接字符串Microsoft.Data.Sqlite数据库连接
在cshtml文件中使用预编译语法
SAP S/4HANA MM模块培训 09 - 字段状态验证 CO 基础配置
ASP.NET Core 标记帮助程序(TagHelper)数据列表支持,循环数据
less里面calc() 语法使用
SAP S/4HANA MM模块培训 01 - 从ERP基础到工厂产品组配置
SAP S/4HANA MM模块培训 03 - 采购组织、采购组物料主数据基础配置