!--a11y-->

SHIFT 命令の以下の記述法を使用して、項目内容をシフトすることができます。SHIFT により、項目内容が 1 文字ずつ移されます。
SHIFT <c> [BY <n> PLACES] [<mode>].
この命令により、項目 <c> が <n> 桁 シフトされます。BY <n> PLACES を省略すると、<n> は 1 として解釈されます。<n> が 0 またはマイナスの場合、<c> は変更されません。<n> が <c> の長さを上回っている場合、<c> は空白で埋められます。<n> は変数にすることができます。
<mode> オプションを変えて、項目 <c> を以下のようにシフトすることができます。
キ <mode> が LEFT の場合:
項目内容が <n> 桁左にシフトされ、項目の右端に <n> 個の空白が追加されます ( デフォルト) 。
キ <mode> が RIGHT の場合:
<n> 桁右にシフトされ、項目の左端に <n> 個の空白が追加されます。
キ <mode> がCIRCULAR の場合:
<n> 桁左にシフトされ、その左側の <n> 文字が右側に表示されます。

DATA: T(10) 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>.
この命令により、文字列 <str> が見つかるまで<c> の項目内容が検索され、項目 <c> が項目の最後までシフトされます。<mode> オプションは上記と同じです。<str> は変数にすることができます。
<str> が <c> で見つからない場合、SY-SUBRC は 4 に設定され、<c> はシフトされません。見つかった場合、SY-SUBRC は 0 に設定されます。

DATA: T(10) VALUE 'abcdefghij',
STRING
LIKE T,
STR(2)
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>.
この命令により、左側の先頭文字または右側の最終文字が <str> に含まれている場合、項目<c> が左または右にシフトされます。次に、項目の右側または左側が空白で埋められます。<str> は変数にすることができます。

DATA: T(14) 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
