文字ごとの項目内容の移動
以下のような SHIFT 命令のバリアントを使用すると、項目内容を移動することができます。SHIFT を使用すると、文字ごとに項目内容が移動します。
文字列の指定位置数の移動
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) 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.
この命令は、文字列 str が見つかるまで c の項目内容を検索して、項目 c を項目の端まで移動します。mode オプションは、上の記述と同じです。str は変数とすることができます。
c 内に str が見つからない場合、sy-subrc は 4 に設定され、c は移動されません。これ以外の場合は、sy-subrc は 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.
この命令によって、左側の最初の文字または右側の最後の文字が str に現れる場合、項目 c が左または右に移動されます。この場合、項目の右側または左側には空白が埋め込まれます。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