温馨提示:本文翻译自stackoverflow.com,查看原文请点击:sap - Remove a special character that exists between 2 characters
abap sap

sap - 删除两个字符之间存在的特殊字符

发布于 2020-04-28 19:24:23

我有以下字符串:
6103951001#136,00#S0#0#99999999#8000010000#10.12.2019#31.10.2019#“ MATZOURAKIS IOANNISMROA118#OSPh”#99470 ## APE A 54226#K
我要删除的是特殊字符HORIZONTAL_TAB(#),这是间“这里是字符串的一部分:‘MATZOURAKIS IOANNISMROA118#OSPh’
?我该怎么办
谢谢

PS。我正在使用以下内容从TAB分隔的文本文件数据中上传数据:char255的data_table类型标准表,

        wa_data_table like line of data_table.

  lv_file = p_file.
  cl_gui_frontend_services=>gui_upload(
    exporting
      filename                = lv_file
      filetype                = 'ASC'
    changing
      data_tab                = data_table

现在,我正在执行以下操作以发现问题

  loop at data_table into wa_data_table.
    find all occurrences of '"' in wa_data_table match count lv_count.
    if sy-subrc = 0 and lv_count = 2.
*      REPLACE ALL OCCURRENCES OF REGEX
*      '(#(?=[^"]*"[^"]*(?:"[^"]*"[^"]*)*$))' IN wa_data_table WITH ' '.
      split wa_data_table at '"'
                            into split_data1 split_data2 split_data3.
      replace all occurrences of cl_abap_char_utilities=>horizontal_tab
             in split_data2 with ' '.
      concatenate split_data1 split_data2 split_data3
                                                  into wa_data_table.
    endif.
endloop.

我认为我们必须不使用字符#来处理cl_abap_char_utilities => horizo​​ntal_tab,而是使用另一种方式。

查看更多

提问者
ekekakos
被浏览
70
mrdeadsven 2020-02-18 19:46

您可以在ABAP中使用以下命令找到并替换该字符:

data : lv_test type string VALUE '6103951001#136,00#S0#0#99999999#8000010000#10.12.2019# 31.10.2019#"MATZOURAKIS IOANNISMROA118#OSPh"#99470##APE A 54226#K'.

REPLACE ALL OCCURRENCES OF REGEX '(#(?=[^"]*"[^"]*(?:"[^"]*"[^"]*)*$))' IN lv_test WITH ''.
write lv_test.

这是此问题的正确解决方案。

  replace all occurrences of regex
                    '(\t(?=[^"]*"[^"]*(?:"[^"]*"[^"]*)*$))'
                    in table data_table with ' '.
  replace all occurrences of regex '["]' in table data_table with ''.