【ABAP】SPLIT命令―文字列の分割方法を1分で解説

ABAP

文字列の分割を行うSPLIT命令について1分で解説します。

SPLIT命令を用いることで、文字列を分割して複数の変数への代入(内部テーブルへの追加)が可能になります。

このページで学べる内容
  • SPLIT命令の処理内容
    • 分割後の値を変数に格納する場合
    • 分割後の値を内部テーブルに格納する場合
  • SPLIT命令利用時の注意点
  • SPLIT命令を利用したサンプルコード

ABAPerであれば知っておきたい重要知識です。是非最後までご覧ください。

スポンサーリンク

SPLIT命令の処理内容

SPLIT命令は、指定した文字列を区切りとして変数の値を分割する命令です。変数a の値を区切り文字「/」で分割した場合のイメージ図がこちら。

変数a は「/」(スラッシュ)を複数含む文字列を格納している状況。ここで、SPLIT命令を用いてスラッシュ単位で変数b~変数eに分割して格納していきます。

決して難しい処理ではありませんね。

早速、構文ルールを学習していきましょう。

パターン1:分割結果を変数に代入する

SPLIT命令:構文ルール

SPLIT(変数)AT(区切り文字)INTO(変数1)(変数2)・・・

DATA LV_TEST(15) TYPE C VALUE 'ABC/DEF/GHI/JKL'.

* /区切りで分割する
SPLIT LV_TEST AT '/' INTO LV_ABC
                          LV_DEF
                          LV_GJI
                          LV_JKL.

WRITE LV_DEF. " ⇒ DEF が表示される

変数 "LV_TEST" の値が、「/」で区切られそれぞれの変数に代入されます。区切り文字が1つも見つからない場合は、最初の変数にすべての文字列が格納されることになります。

文字列の検索時(区切り文字を探すとき)は、大文字と小文字が区別されます。

尚、下記のように代入先の変数の数が少ない場合(文字列が分割しきれない場合)は、分割されずに最後の変数に代入が行われます。

期待する結果に応じた数の変数を用意しておく必要があります。

DATA LV_TEST(15) TYPE C VALUE 'ABC/DEF/GHI/JKL'.

* /区切りで分割する
SPLIT LV_TEST AT '/' INTO LV_ABC
                          LV_DEF.

WRITE LV_DEF. " ⇒ DEF/GHI/JKL が表示される

尚、例えば変数の最初にスラッシュが来た場合は、以下のように最初の変数の値はブランクとなります。

SPLIT命令は、実は結構奥が深い命令なので注意が必要です。

DATA LV_TEST(15) TYPE C VALUE '/ABC/DEF'.

* /区切りで分割する
SPLIT LV_TEST AT '/' INTO LV_ABC
                          LV_DEF.

WRITE LV_ABC. " ⇒ 何も表示されない(ブランク)

パターン2:分割結果を内部テーブルに代入する

また、格納結果を変数に代入するのではなく、内部テーブルに格納することも可能です。

SPLIT命令:構文ルール2

SPLIT(変数)AT(区切り文字)INTO TABLE(内部テーブル).

DATA LV_TEST(15) TYPE C VALUE 'ABC/DEF/GHI/JKL'.

* 結果格納用内部テーブル
DATA LT_TEST TYPE TABLE OF test.

* /区切りで分割する
SPLIT LV_TEST AT '/' INTO  LT_TEST.
DESCRIBE TABLE LT_TEST LINES a.

WRITE a. " ⇒結果は「4」

分割結果を変数に格納していく場合、結果の分だけ変数を定義しておく必要がありますが、内部テーブルを利用すれば結果がいくつになっても問題ありません。

利用シーンに応じた使い分けが重要です。

リターンコード:SY-SUBRC

SPLIT命令では、ショートダンプなどが発生しないためエラーハンドリングをしておくことが重要です。

下記の通り処理結果に応じてSY-SUBRCの値が入れ替わりますので、その結果に応じて分岐をいれておくことをおすすめします。

SY-SUBRCの値
  • 0・・・正常に文字列分割が行われた
  • 4・・・文字列の分割が一部切り捨てられた(代入できるオブジェクトがない)
DATA LV_TEST(15) TYPE C VALUE 'ABC/DEF/GHI'.

* /区切りで分割する
SPLIT LV_TEST AT '/' INTO LV_ABC
                          LV_DEF.

IF SY-SUBRC <> 0.
  WRITE LV_DEF. " ⇒ DEF/GHI
ENDIF.

SAP / ABAPを1から学習したい方は

SAP / ABAPを1から学習したい初心者の方向けに、できるだけ網羅的にABAPが理解できるよう以下ページに知識体系を整理しています。

特に初心者のうちは、どこから学べばよいか?どう勉強すれば良いか?すらわからない状態になりがち。

ある程度の知識を持ったうえで、はじめて実践的な理解へとつながります。

是非、一度ご覧になってみてください。

タイトルとURLをコピーしました