Удалить специальный символ, который существует между 2 символами - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть следующая строка:
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: data_table type Стандартная таблица char255,

        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 => horizontal_tab не с символом #, а другим способом.

1 Ответ

1 голос
/ 11 февраля 2020

Вы можете использовать следующее в 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 ''.
...