文字列処理

 

このトピックでは、ABAP言語で文字列処理の方法を取り上げて説明します。

文字列の長さを取得

文字列の長さを取得するには、関数STRLENを使用することができます。

例:

DATA : l_v(20) TYPE C,
       l_i     TYPE I.

l_v = 'ABCDEFG'.
l_i = STRLEN( l_v ). "変数に「7」が保持されることになる

全角半角チェック

文字列に全角文字や半角文字が入っていないかをチェックするには、以下の手順で行うことができます。

  • 汎用モジュールSTRING_LENGTHで文字列の表示長(全角:2、半角:1)を取得 
    このモジュールは、 CL_ABAP_LIST_UTILITIESクラスのDYNAMIC_OUTPUT_LENGTHメソッドを実行しています。
  • 関数STRLENで文字列の文字数を取得
  • 文字数と表示長を比較

文字列の内容検索

文字列の内容を検索するには、命令FINDを使用することができます。 オプションを使って、探したい値の開始位置を調べるときに使うことが多いです。

文字列のオフセット

文字列のオフセット処理は、ABAP言語固有の仕様に取り込まれています。 構文:文字列+開始位置(指定桁数)  ※開始位置は0から

例:

DATA: l_v TYPE string,
      l_r TYPE string.  
l_v = 'w,f,mj'.
l_r = l_v+2(2)."変数に「f,」が保持されることになる

文字列の置換

文字列の一部を他の文字列で置換するには、命令REPLACEを使用することができます。 構文: REPLACE <置換前> WITH <置換後> INTO <置換対象文字列>.

例:

DATA: l_v TYPE string.
 
l_v = 'w,f,mj'.
REPLACE ',' WITH ';' INTO l_v."変数に「w;f;mj」が保持されることになる

文字列の分割

一つの文字列を区切り文字の指定により複数の文字列に分割するには、命令SPLITを使用することができます。

例:

    
DATA: l_s1 TYPE string,
      l_sx TYPE string.
DATA: lt_r  TYPE TABLE CHAR10.  
l_s1 = 'w,f,mj'.
l_sx = ','.
SPLIT l_s1 AT l_sx INTO TABLE lt_r. 
* 「lt_r」には、1行目に「w」2行目に「f」3行目に「mj」が保持されることになる

文字列のシフト

文字列を指定文字数分移動するには、命令SHIFTを使用することができます。 構文: SHIFT <移動対象文字列> [BY <移動文字数> PLACES] [モード].

例:

DATA: l_v TYPE string.  
l_v = 'abcdefghij''.

SHIFT l_v BY 3 PLACES CIRCULAR. "変数に「defghijabc」が保持されることになる

文字列の結合

2つ以上の文字列を一つに結合するには、命令CONCATENATEを使用することができます。

例:

    
DATA: l_s1 TYPE string,
      l_s2 TYPE string,
      l_s  TYPE string.  
l_s1 = 'w'.
l_s2 = 'f'.  
CONCATENATE l_s1 l_s2 INTO l_s SEPARATED BY space. "変数に「w f」が保持されることになる

空白の削除

文字列に入っている空白を削除するには、命令CONDENSE を使用することができます。

例:

DATA: l_v TYPE string.  

l_v = 'a  bf c   d'.

CONDENCE l_v."変数に「a bf c d」が保持されることになる、文字列と文字列の間に一つの空白が残る
CONDENCE l_v NO-GAPS."変数に「abfcd」が保持されることになる、すべての空白が削除される