ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

abap文本中的特殊字符(回车符,换行符,制表符等)

2021-07-30 11:05:05  阅读:466  来源: 互联网

标签:codepage lv 回车符 abap && msg 制表符 TYPE 特殊字符


1、获取SAP特殊字符

sap特殊字符用类cl_abap_char_utilities的静态变量保存,可以通过该类的静态变量获取特殊字符。

例如获取/n/r回车换行:

DATA _n_r TYPE char2.  "回车换行
DATA _n   TYPE char1.  "换行
DATA _r   TYPE char1.  "回车

_n_r = cl_abap_char_utilities=>cr_lf.
_n   = _n_r+0(1).
_r   = _n_r+1(1).

2、特殊字符在文本中的显示

DATA lv_msg TYPE string.

lv_msg = 'This is first line,' && _n_r && 'separated by "/n/r",' && _n && 'separated by "/n",' && _r && 'separated by "/r".'.
WRITE:/ lv_msg.

特殊字符在sap快速显示中表示为“#”符号:

 正确显示:

3、特殊字符的替换方法

若文本中包含特殊字符,在sap接口数据传输中极有可能会因为无法处理特殊字符而使程序意外终止,因此有时需要在传输前先去掉sap文本中的特殊字符。

(1)针对某个特定特殊字符进行替换:

替换全部回车换行

REPLACE _n_r WITH ' ' INTO lv_msg.
WHILE sy-subrc = 0.
  REPLACE _n_r WITH ' ' INTO lv_msg.
ENDWHILE.

(2)使用sap函数进行替换:

获取当前语言环境代码页编号

DATA codepage TYPE cpcodepage.
CALL FUNCTION 'NLS_GET_FRONTEND_CP'
  EXPORTING
    langu = sy-langu
  IMPORTING
    frontend_codepage = codepage
  EXCEPTIONS
    illegal_syst_codepage = 1
    no_frontend_cp_found  = 2
    internal_or_db_error  = 3
    OTHERS = 4.
WRITE:/ codepage.

中文环境下代码页是8404

当前代码页下文本中特殊字符替换为空格

CALL FUNCTION 'SCP_REPLACE_STRANGE_CHARS'
  EXPORTING
    intext      = lv_msg
    inter_cp    = codepage
    replacement = 32
  IMPORTING
    outtext = lv_msg
    EXCEPTIONS
    invalid_codepage  = 1
    codepage_mismatch = 2
    internal_error    = 3
    cannot_convert    = 4
    fields_not_type_c = 5
    OTHERS = 6.
WRITE:/ lv_msg.

快速显示文本中表示特殊字符的“#”已经替换为空格

实际显示效果:

4、附测试代码:

*&---------------------------------------------------------------------*
*& Report  ZTEST05
*&
*&---------------------------------------------------------------------*
*& test by ybin 2021.07.30
*&---------------------------------------------------------------------*

REPORT ztest05.

DATA _n_r TYPE char2.  "回车换行
DATA _n   TYPE char1.  "换行
DATA _r   TYPE char1.  "回车

DATA lv_msg TYPE string.

_n_r = cl_abap_char_utilities=>cr_lf.
_n   = _n_r+0(1).
_r   = _n_r+1(1).
WRITE:/ _n_r, _n, _r.

lv_msg = 'This is first line,' && _n_r && 'separated by "/n/r",' && _n && 'separated by "/n",' && _r && 'separated by "/r".'.
WRITE:/ lv_msg.

* 获取当前语言环境代码页编号
DATA codepage TYPE cpcodepage.
CALL FUNCTION 'NLS_GET_FRONTEND_CP'
  EXPORTING
    langu = sy-langu
  IMPORTING
    frontend_codepage = codepage
  EXCEPTIONS
    illegal_syst_codepage = 1
    no_frontend_cp_found  = 2
    internal_or_db_error  = 3
    OTHERS = 4.
WRITE:/ codepage.

* 当当前代码页下文本中特殊字符替换为空格
CALL FUNCTION 'SCP_REPLACE_STRANGE_CHARS'
  EXPORTING
    intext      = lv_msg
    inter_cp    = codepage
    replacement = 32
  IMPORTING
    outtext = lv_msg
    EXCEPTIONS
    invalid_codepage  = 1
    codepage_mismatch = 2
    internal_error    = 3
    cannot_convert    = 4
    fields_not_type_c = 5
    OTHERS = 6.
WRITE:/ lv_msg.

运行结果:

 

标签:codepage,lv,回车符,abap,&&,msg,制表符,TYPE,特殊字符
来源: https://www.cnblogs.com/ybinlog/p/15078581.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有