ABAPにおける文字列操作を行うCONDENSE命令の使い方、NO-GAPSオプションについて解説します。
CONDENSEをそのまま日本語に直すと「濃縮する」「凝縮する」といった意味で、ABAPの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型でなければ、右側にブランクが格納されます。
TEST+10(10) = 'sample'.
上記はABAPの1技法オフセットを用いています。
文字列操作において頻繁に見かける技法ですので、合わせてご確認ください。
サンプルコード②: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命令では「連続するブランク」が消去され、ブランクが1つだけに変更されるため、最終的な結果は以下のようにすっきりとした形になります。
2文字以上の連続したブランクのみを消去するのがCONDENSE命令で理解が難しい点ですので、以下の通りきちんと整理して理解しておきましょう。
- ブランクが連続で存在する場合 ⇒ 連続するブランクを削除し1つのブランクに変更する
- ブランクが連続で存在しない場合 ⇒ 何もしない
CONDENSE命令は、MESSAGE命令を用いてテキストを動的に表示したい場合などに用いる場合などに応用できます。
※上記サンプルコードを理解するためには、以下の知識も必要になります。サンプルコードの意味が分からない方は以下のリンクからDATA命令、WRITE命令についても合わせてご覧ください。
NO-GAPSオプション
CONDENSE (変数) NO-GAPS.
CONDENSE (変数) NO-GAPS.
「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.
こちらを実行した結果がこちらです。
ブランクがすべてなくなり、左詰めされました。NO-GAPSオプションを適切に利用できると、メッセージ出力系の処理に強くなれます。この機会に覚えておきましょう。
CONDENSE命令の注意点
CONDENSE命令で指定する変数(データオブジェクト)は、文字型でなければいけません。文字型以外の場合は、構文チェックにひっかかります。
データ型について詳しく知りたい方は、こちらのページをご覧ください。
SAP / ABAPを1から学習したい方は
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!