Feldinhalte verschieben 

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