SHIFT

SHIFT — оператор, по-знаково сдвигающий содержимое текстового поля.

Синтаксис
SHIFT c [BY n PLACES] [mode]. Оператор SHIFT сдвигает текстовое поле c на n позиций. Если был опущен оператор BY n PLACES, операнд n интерпретируется как 1. Если значение n равно 0 или отрицательное, операнд c не изменяется. Если длина n превышает длину c, операнд с заполняется пробелами. Операнд n может иметь переменное значение.

С помощью ключа mode, можно сдвигать текстовое поле следующим образом:
 * ключ LEFT сдвигает содержимое текстового поля на n позиций влево, добавляя n пробелов справа (по умолчанию).
 * ключ RIGHT сдвигает содержимое текстового поля на n позиций вправо, добавляя n пробелов слева.
 * ключ CIRCULAR сдвигает содержимое n позиций влево и n позиций слева направо.

Пример
DATA: t(10) TYPE c VALUE 'abcdefghij', string LIKE t. string = t. WRITE string. SHIFT string. WRITE / string. string = t. SHIFT string BY 3 PLACES LEFT. WRITE / string. string = t. SHIFT string BY 3 PLACES RIGHT. WRITE / string. string = t. SHIFT string BY 3 PLACES CIRCULAR. WRITE / string. Результат: abcdefghij bcdefghij defghij abcdefg defghijabc

Синтаксис
SHIFT c UP TO str mode. Оператор SHIFT перебирает содержимое поля c пока не найдет строку str, затем сдвигает содержимое поля c до текстовой строки str. Операнд str может иметь переменное значение.

Если строка str не была найдена, то код возврата sy-subrc принимает значение 4. В противном случае —- 0.

Пример
DATA: t(10) TYPE c VALUE 'abcdefghij', string LIKE t,      str(2) TYPE c VALUE 'ef'. string = t. WRITE string. SHIFT string UP TO str. WRITE / string. STRING = t. SHIFT string UP TO str LEFT. WRITE / string. STRING = t. SHIFT string UP TO str RIGHT. WRITE / string. string = t. SHIFT string UP TO str CIRCULAR. WRITE / string. Результат: abcdefghij efghij efghij abcdef efghijabcd

Синтаксис
SHIFT c LEFT DELETING LEADING  str. SHIFT c RIGHT DELETING TRAILING str. Оператор SHIFT сдвигает текстовое поле c влево или вправо в случае, если первый знак слева или последний знак справа содержится в str. Затем левая или правая часть поля заполняется пробелами. Операнд str может иметь переменное значение.

Пример
DATA: t(14) TYPE c VALUE '   abcdefghij', string LIKE t,      str(6) VALUE 'ghijkl'. string = t. WRITE string. SHIFT string LEFT DELETING LEADING SPACE. WRITE / string. string = t. SHIFT string RIGHT DELETING TRAILING str. WRITE / string. Результат: abcdefghij abcdefghij abcdef