Конечно, вопрос обсуждался тысячи раз (1, 2, 3), но ничего не предлагалось, кроме этого уродливого фрагмента:
data: str type string value 'abcd#',
len type i.
len = strlen( str ).
len = len - 1.
str = str+0(len).
Есть ли какой-нибудь элегантный лайнер для этого? Единственный вид, который я нашел до сих пор, – это
SHIFT str RIGHT DELETING TRAILING ','.
Однако для этого требуется, чтобы вы знали, что последний символ (маска TRAILING) и маска не поддерживают регулярные выражения или подстановочные знаки. Или я ошибаюсь?
Этот вариант для меня не работает по какой-то причине
SHIFT string RIGHT BY 1.
Может быть, кто-то знает более красивый синтаксис, чтобы сделать это в одной строке? Что нового в ABAP 7.40 или 7.50?
SUBSTRING, чтобы получить последний символ строки:
DATA: str TYPE string VALUE 'abcd#'.
str = substring( val = str off = strlen( str ) - 1 len = 1 ).
str будет ‘#’
Чтобы удалить последний символ строки (например, в вашем примере):
str = substring( val = str off = 0 len = strlen( str ) - 1 ).
Введите SUBSTRING в своем редакторе ABAP и нажмите F1 на нем, есть еще несколько вариантов (substring_after, substring_before и т.д.).
Трюк, который я использовал в прошлом:
DATA l_str TYPE string VALUE 'abcd#'.
SHIFT l_str RIGHT by 1 PLACES CIRCULAR. " move last char to start, read it from l_str(1)
l_str = l_str+1. " remove it.