PR

【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型でなければ、右側にブランクが格納されます。

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

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. 

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

blank
CONDENSE命令実行結果②

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

CONDENSE命令の注意点

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

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

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をコピーしました