【ABAP】CONDENSE命令を1分で解説

ABAP

ABAPにおける文字列操作を行うCONDENSE命令の使い方、NO-GAPSオプションについて解説します。

CONDENSEをそのまま日本語に直すと「濃縮する」「凝縮する」といった意味で、ABAPのCONDENSE命令では変数(データオブジェクト)に含まれるブランクを削除し、文字列だけを残す処理を行います。

このページで学べる内容
  • CONDENSE命令の処理内容
  • NO-GAPSオプションの利用方法
  • CONDENSE命令利用時の注意点

ABAPerであれば知らないと恥ずかしい超・基本知識です。是非最後までご覧ください。

スポンサーリンク

CONDENSE命令とは

CONDENSE命令は、ABAPにおける文字列の処理命令の1つ。

冒頭でも解説した通り「CONDENSE」とは日本語で「凝縮する」という意味で、その意味の通り文字列を凝縮(縮める)処理を行います。早速、構文ルールと、実際の処理内容を見てみましょう。

構文ルール:CONDENSE命令

CONDENSE (変数).

CONDENSE (変数).

指定した変数に含まれる文字列の①先頭と末尾に存在する空白と、②その他の「連続するブランク」が消去され、ブランクが1つだけに変更されます。

実際のサンプルコードを用いて、どういうことか具体的なイメージを持てるよう確認していきましょう。

サンプルコード①:CONDENSE命令

DATA TEST(30) TYPE C.

TEST+10(10)  = 'sample'.
CONDENSE TEST.
WRITE TEST.

変数TESTは30桁長であるのに対して、実際は「sample」という6桁の値以外はすべてブランクの乗状態です。

CONDENSE命令では、①先頭と末尾に存在するブランクを削除するため、結果は以下のようになります。

データオブジェクトがstring型の場合には、変数の長さも合わせて圧縮してくれます。string型でなければ、右側にブランクが格納されます。

サンプルコード②:CONDENSE命令

DATA TEST(30) TYPE C.

TEST(10)       = 'I am'.
TEST+10(10) = 'BIZonline'.
TEST+20(10) = 'Author'.
CONDENSE TEST.

WRITE TEST.

サンプルコードの2つ目を見てみましょう。こちらを動かした結果が、こちらです。

CONDENSE命令の実行結果①

CONDENSE命令を行う前の処理は、変数をオフセット処理していますので以下のように連続するブランクが存在しています。

CONDENSE命令では「連続するブランク」が消去され、ブランクが1つだけに変更されるため、最終的な結果は以下のようにすっきりとした形になります。

2文字以上の連続したブランクのみを消去するのがCONDENSE命令で理解が難しい点ですので、以下の通りきちんと整理して理解しておきましょう。

  • ブランクが連続で存在する場合  ⇒ 連続するブランクを削除し1つのブランクに変更する
  • ブランクが連続で存在しない場合 ⇒ 何もしない

CONDENSE命令は、MESSAGE命令を用いてテキストを動的に表示したい場合などに用いる場合などに応用できます。

※上記サンプルコードを理解するためには、以下の知識も必要になります。サンプルコードの意味が分からない方は以下のリンクからDATA命令、WRITE命令についても合わせてご覧ください。

DATA命令―変数の定義について

WRITE命令―文字列の出力

NO-GAPSオプション

CONDENSE (変数) NO-GAPS.

CONDENSE (変数) NO-GAPS.

「NO-GAPS」オプションを指定すると、すべてのブランクを削除するようになります。ここは混乱しやすい部分でもあるので、オプションを利用する場合とオプションを利用しない場合を丁寧に整理しておきましょう。

NO-GAPSオプション不使用時
⇒ 2文字以上のブランクが削除され、1つのブランクになる

NO-GAPSオプション使用時
⇒ すべてのブランクが削除される

つまり、NO-GAPSオプションを利用するとすべてのブランクが削除され文字列が左詰めされることになります。

こちらも具体的に処理の内容がイメージできるようサンプルコードを用いて具体的なイメージを持てるようにしておきましょう。

サンプルコード:NO-GAPS

DATA TEST(30) TYPE C.

TEST(10)    = 'I am'.
TEST+10(10) = 'BIZonline'.
TEST+20(10) = 'Author'.

CONDENSE TEST NO-GAPS.
WRITE TEST.

こちらを実行した結果がこちらです。

CONDENSE命令実行結果②

ブランクがすべてなくなり、左詰めされました。NO-GAPSオプションを適切に利用できると、メッセージ出力系の処理に強くなれます。この機会に覚えておきましょう。

CONDENSE命令の注意点

CONDENSE命令で指定する変数(データオブジェクト)は、文字型でなければいけません。文字型以外の場合は、構文チェックにひっかかります。

データ型について詳しく知りたい方は、こちらのページをご覧ください。

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

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

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

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

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

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