ABAP 全角空格、特殊字符处理

本文介绍了在ABAP中处理全角空格和特殊字符的问题。通过使用CONDENSE、TRANSLATE、SHIFT等关键字,以及调用函数'SJIS_DBC_TO_SBC'和'SCP_REPLACE_STRANGE_CHARS',成功解决了因全角空格导致的数据重复问题。

前言

今天因为客户在批导物料主数据的时候发现导入了两条相同的物料,但是有一条物料的内部格式多了一个空格,如下图,所以出现了两条数据:


一、问题及解决办法

一开始的解决思路是在数据处理的时候去掉字符的所有空格,但是这个方法依然没有解决这个问题,后来想到了输入法的全角半角问题,发现这个神奇的空格是我们英文输入法的全角空格;

用了一下解决办法:

1.CONDENSE关键字---->失败

2.TRANSLATE关键字---->失败

3.SHIFT关键字------------->成功

4.REPLACE关键字-------->成功

5.全角半角转换:------------>失败

          全角转半角:SJIS_DBC_TO_SBC

          半角转全角:SJIS_SBC_TO_DBC

6.特殊字符转为空格再去空格,因为批导模板会用到EXCEL的回车键读取EXCE的时候会有特殊字符,如果输入错误的不仅仅有

### ABAP特殊字符 `#` 的处理方法 在 ABAP 编程中,特殊字符如 `#` 可能会在字符串操作或动态语句生成时引发问题。以下详细介绍如何正确处理 `#` 字符。 #### 1. 动态 SQL 中的 `#` 处理 当需要在动态 SQL 语句中使用 `#` 时,必须确保其被正确转义或替换为适当的值。例如,在字段名动态引用中,`#` 并未直接参与语法功能[^1]。如果需要包含 `#`,可以通过字符串拼接实现。 ```abap DATA: lv_sql TYPE string. lv_sql = |SELECT * FROM table WHERE field = 'value_with_#'|. EXEC SQL. EXEC( lv_sql ). ENDSQL. ``` #### 2. 字符串中的 `#` 替换 若需将 `#` 替换为其他字符或序列,可以使用 `REPLACE` 函数进行全局替换。 ```abap DATA: lv_string TYPE string VALUE 'This is a #test# string.'. REPLACE ALL OCCURRENCES OF '#' IN lv_string WITH '&hash;'. WRITE: / lv_string. " 输出: This is a &hash;test&hash; string. ``` #### 3. Smartforms 中的特殊字符处理 在 Smartforms 中,如果需要打印包含 `#` 的文本,可能会遇到显示问题。通常,这种问题可以通过调整输出设备的字符集来解决[^4]。例如,选择支持所需字符的设备类型(如 SWIN),以确保 `#` 能够正确显示。 #### 4. 使用字符串模板插入 `#` 在 ABAP 的字符串模板功能中,可以直接插入 `#` 而无需额外转义。 ```abap DATA: lv_message TYPE string, lv_hash TYPE string VALUE '#'. lv_message = |Special character: { lv_hash }|. WRITE: / lv_message. " 输出: Special character: # ``` #### 5. 回车换行与 `#` 的结合 若需在字符串中同时包含回车换行和 `#`,可以结合 `||` 和字符串拼接实现。 ```abap DATA: text TYPE string. text = |zzz#||abc#|||. IF contains( val = text regex = '^abc#' ). WRITE: / 'Yes'. ELSE. WRITE: / 'No'. ENDIF. ``` #### 注意事项 - 在动态 SQL 或字符串操作中,务必注意 `#` 的上下文含义,避免语法错误。 - 对于复杂的字符串处理任务,建议使用 ABAP 提供的内置函数和工具,以减少手动编码带来的风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值