SHIFT(文字列の指定位置数の移動)
文字ごとの項目内容の移動
以下のような 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