Um den Inhalt eines Felds zu verschieben, verwendet man die folgenden Varianten der Anweisung SHIFT. Mit SHIFT werden Feldinhalte zeichenweise verschoben.
Verschieben einer Zeichenkette um eine bestimmte Anzahl von Stellen
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:
Verschiebt den Feldinhalt um <n> Stellen nach links und ergänzt rechts <n> Leerstellen (Standardeinstellung).
Verschiebt den Feldinhalt um <n> Stellen nach rechts und ergänzt links <n> Leerstellen.
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
Verschieben des Feldinhaltes bis zu einer bestimmten Zeichenkette
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
Verschieben einer Zeichenkette abhängig von dem ersten oder letzten Zeichen
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