Замена символа ABAP (REPLACE)

Часто при разработке программ ABAP возникает необходимость заменить подстроку другой. Например, заменить запятую на точку или за место разделителя вставить пробел и много других вариантов. Функция замена символа ABAP REPLACE поможет. Эта функция заменяет подстроку текста строкой символов и возвращает измененный текст в результате. Есть два варианта вызова, мы рассмотрим каждый из них более подробно:

Замена символов в строке ABAP – REPLACE

 

Заменить символы ABAP часть используя смещение(off) и длину подстроки после смещения(len).

Эта опция заменяет подстроку, которую мы выбираем, используя off смещение и длина, указанная в len переменная со значением, указанным в аргументе with. С помощью этой опции вызова должен быть определен хотя бы один из этих аргументов. Примеры:

Замена символов в строке ABAP с использованием всех параметров
Замена символов в строке ABAP с использованием всех параметров

Replace будет работать как вставка.

Если мы пропустим параметр len или укажем его len = 0, то данная конструкция будет работать как вставка.

Первый элемент длины len будет заменен

Если указан только параметр len, что аналогично указанию off = 0, то первый элемент длины len будет заменен.

Вставка в конец строки ABAP используя replace.

Если значение параметра off равно длине строки, то значение параметра with будет вставлено в конец строки:

 

Замена символа ABAP используя подстроку(sub) или регулярное выражение(regex).

Замена символа ABAP и его варианты. Этот параметр определения ищет определенное количество вхождений occ в строке, проверяя соответствие подстроке, указанной в substring, или регулярному выражению, указанному в аргументе regex. И заменяет эти вхождения значением, переданным в with. Если значение параметра with имеет фиксированную длину, то пробелы, указанные в конце, будут игнорироваться программой. Если вы передадите значение 0 в аргумент occ, все вхождения будут заменены. Кроме того, по умолчанию при поиске заменяемых значений учитывается регистр, но это можно изменить с помощью параметра case.

Если параметр occ не указан, то по умолчанию это будет occ = 1, и будет заменено только первое вхождение подстроки:

Значением по умолчанию для параметра является case = abap_true, что означает регистр символов. То есть, указав case = abap_true или пропустив этот параметр, вы получите тот же результат:

Чтобы замена работала корректно, необходимо указать параметр case = abap_false, чтобы регистр игнорировался.

 

Когда может замена символов или подстроки в реальных примерах?

  • При загрузке из Excel у нас на вход приходит число с разделителем запятая. Но в SAP системе оно хранится с точкой. Если мы попытаемся сразу напрямую присвоить это значение числу, то получим ошибку. Если мы предварительно преобразуем строку заменив запятую на точку, то присвоение пройдёт успешно. Пример использования есть в ссылке.
  • При использовании масок сравнения для таблицы range и для ограничения запроса вы должны передать значение другим способом. В этом случае эту замену удобно выполнить с помощью replace с параметром regex, в который мы передаем символ, который необходимо заменить:

В результате мы получаем значение, которое можно указать для ограничения запроса в дополнении WHERE. Например: WHERE name LIKE lv_str.

Добавить комментарий