Um den Inhalt eines Felds zu verschieben, verwendet man die folgenden Varianten der Anweisung SHIFT. Mit SHIFT werden Feldinhalte zeichenweise verschoben.
SHIFT c [BY n PLACES] [mode].
Feld c wird um n Stellen verschoben. Wenn der Zusatz BY n PLACES weggelassen wird, wird n als eins interpretiert. Wenn n 0 oder negativ ist, bleibt c unverändert. Wenn n die Länge von c überschreitet, wird c mit Leerzeichen aufgefüllt. n kann variabel sein.
Mit verschiedenen Optionen mode kann das Feld c wie folgt verschoben werden:
mode ist LEFT:
Verschiebt den Feldinhalt um n Stellen nach links und ergänzt rechts n Leerstellen (Standardeinstellung).
mode ist RIGHT:
Verschiebt den Feldinhalt um n Stellen nach rechts und ergänzt links n Leerstellen.
mode ist CIRCULAR:
Bewirkt eine zyklische Verschiebung des Feldinhalts (verschiebt den Feldinhalt n Stellen nach links und verschiebt die n linken Stellen nach rechts.
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.
Listenausgabe:
abcdefghij
bcdefghij
defghij
abcdefg
defghijabc
SHIFT c UP TO str mode.
Die Anweisung durchsucht den Feldinhalt c, bis die Zeichenkette str gefunden wird und verschiebt c, bis str sich am Rand des Feldes befindet. Die Optionen (mode) sind dieselben wie oben. str kann eine Variable sein.
Wenn str in c nicht gefunden wird, wird sy-subrc auf 4 gesetzt und c wird nicht verschoben. Andernfalls wird sy-subrc auf 0 gesetzt.
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.
Listenausgabe:
abcdefghij
efghij
efghij
abcdef
efghijabcd
SHIFT c LEFT DELETING LEADING str.
SHIFT c RIGHT DELETING TRAILING str.
Feld c wird nach links oder rechts verschoben, solange das linke bzw. rechte Zeichen in str enthalten ist. Die rechte bzw. linke Seite wird mit Leerzeichen aufgefüllt. str kann eine Variable sein.
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.
Listenausgabe:
abcdefghij
abcdefghij
abcdef