PR

【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から学習したい方は

初めてABAPを勉強するのは結構難しいですよね。

でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。

ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?

あなたの技術、もっと価値ある場所で活かしませんか?
SAPエンジニアのキャリア支援はこちらから↓

No.1 > 外資系・IT業界などハイクラスの転職なら【アクシスコンサルティング】blank
4人に1人のコンサルタントが選ぶパートナー!
ビッグ4やアクセンチュアへの転職を実現し年収1000万へ。

No.2 > IT・Web転職特化エージェント【レバテックキャリアblank
blank
サービス利用者数20万人突破。

平均年収アップ率77%であなたの転職成功を保証します。

No.3 > blankリクルートエージェント
blank
\転職支援実績NO.1/

応募が殺到しすぎるが故に・・・非公開にせざるを得ない魅力的な求人が多数!

読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
ABAPSAP
シェアする
ビズドットオンラインをフォローする
タイトルとURLをコピーしました