Вопрос:
Конечно, вопрос обсуждался тысячи раз (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 и т.д.).
Ответ №1
Трюк, который я использовал в прошлом:
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.