【ABAP】REPLACE命令―文字列の置換方法を1分で解説

ABAP

ABAPにおける文字列操作命令「REPLACE命令」について1分で解説します。

REPLACE命令はその名の通り指定した文字列を別の文字列に置き換える命令。うまく利用すれば、Excel関数のTRIM関数やSUBSTITUE関数のように利用可能です。

CONSTANTS:
  GC_A(01) TYPE C VALUE 'A',
  GC_B(01) TYPE C VALUE 'B'.

DATA LV_TEXT TYPE STRING.
LV_TEXT = 'AAAA'.

* 'A'を'B' に置換
REPLACE GC_A IN LV_TEXT WITH GC_B.
このページで学べる内容
  • REPLACE命令の処理と構文ルール
  • FIRST OCCURENCE OF / ALL OCCURENCES OF オプション
スポンサーリンク

REPLACE命令とは?

REPLACE命令とは、指定した文字列を別の文字列に置換する命令です。

REPLACE命令:構文ルール

REPLACE [置換前の文字] IN [変数] WITH [置換後の文字].

LV_TEXT = 'AAAA'

* 'A'を'B' に置換
REPLACE 'A' IN LV_TEXT WITH 'B'.

* 結果 LV_TEXT ⇒「BAAA」

指定した変数に含まれる文字列 'A' が 'B' に置換されます。

注意すべきなのが、置換されるのは最初の文字列のみであるという点。後述する「ALL OCCURENCES」オプションを利用すると、全ての文字列を置換できます。

LV_TEXT = 'AAAABBBBAAAA'

* 'AAAA'を'CCCC' に置換
REPLACE 'AAAA' IN LV_TEXT WITH 'CCCC.

* 結果 LV_TEXT ⇒「CCCCBBBBAAAA」

このサンプルコードの場合、置換対象の文字列 'AAAA' は対象の変数に2回表れますが最初の1つしか置換されません。

対象の変数に指定した文字列が1つしかないことが確実に分かっている場合(もしくは、あえて最初の文字列のみを置換したい場合)にオプションなしでREPLACE命令を用いるのが一般的です。

SY-SUBRCの値

置換に成功すると、SY-SUBRCの値は0に。失敗する(置換対象の文字列が存在しない)と4にセットされます。

REPLACE命令実行後の SY-SUBRC の値
  • 置換に成功:SY-SUBRC = 0
  • 置換に失敗:SY-SUBRC = 4
  • 置換に成功(条件つき):SY-SUBRC = 2.

条件付き成功というのは以下のような場合で、置換には成功しても置換結果の項目長が溢れてしまう場合に、SY-SUBRCが '2' にセットされます。

DATA LV_TEXT TYPE C LENGTH 4.
LV_TEXT = 'ABCD'

* 'A'を'123' に置換
REPLACE 'A' IN LV_TEXT WITH '1234.

* 結果 LV_TEXT ⇒「123B」
SY-SUBRCとは?

SY-SUBRCとはシステム変数の1つで、処理の結果(成功 or 失敗)を保持します。

他のプログラミング言語を学んだ方であれば、Bool型の変数をイメージいただければ良いかと思います。詳しくは下記のページで、システム項目全般の解説を行っておりますので是非ご覧ください。

指定した全文字列を置換する方法:ALL OCCURRENCES OF

REPLACE命令:構文ルール

REPLACE ALL OCCURRENCES OF [置換前の文字] IN [変数] WITH [置換後の文字].

指定した全文字列をすべて置換したい場合は、「ALL OCCURRENCES」オプションを利用します。

CONSTANTS:
  GC_A(01) TYPE C VALUE 'A',
  GC_B(01) TYPE C VALUE 'B'.

DATA LV_TEXT TYPE STRING.
LV_TEXT = 'AAAA'.

* 'A'を'B' に置換
REPLACE ALL OCCURRENCES OF GC_A IN LV_TEXT WITH GC_B.

* 結果 LV_TEXT⇒「BBBB」

これで、指定した変数の中に含まれる 'A' を 'B' に置換することができます

ExcelのTRIM関数やSUBSTITUE関数のように利用したい場合は、こちらのオプションを利用するのがお勧めです。

尚、「ALL OCURRENCES」オプションの反対が「FIRST OCCURENCE」オプション。こちらは、その名の通り「最初の文字列だけを置換する」オプションです。すなわち、何もオプションを指定しない場合と同様の動きになります。

CONSTANTS:
  GC_A(01) TYPE C VALUE 'A',
  GC_B(01) TYPE C VALUE 'B'.

DATA LV_TEXT TYPE STRING.
LV_TEXT = 'AAAA'.

* 最初の 'A' を 'B' に置換
REPLACE FIRST OCCURRENCE OF GC_A IN LV_TEXT WITH GC_B.

* 結果 LV_TEXT⇒「BAAA」

例えば、連続した文字列(重複)を削除したい場合などに有効です。

CONSTANTS:
  GC_AA(02) TYPE C VALUE 'AA',
  GC_A(01)  TYPE C VALUE 'A'.

DATA LV_TEXT TYPE STRING.
LV_TEXT = 'AAB AAB AAB'.

* 'AA' を 'A' に置換
REPLACE ALL OCCURRENCES OF GC_AA IN LV_TEXT WITH GC_A.

* 結果 LV_TEXT⇒「AB AB AB」

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

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

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

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

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

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

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

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

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