1. 程式人生 > 其它 >abap文字中的特殊字元(回車符,換行符,製表符等)

abap文字中的特殊字元(回車符,換行符,製表符等)

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.

執行結果: