【ABAP】CHARLEN命令

概要

最初の文字の長さを数値で返す命令となります。
注意点としてはECC6.0以降(US ※1)は最初の文字数をカウントし、R/3(NUS ※2)では最初の文字のバイト数をカウントします。
例えば’あABC’の文字であれば最初の文字数をカウントした場合は値「1」、最初の文字のバイト数をカウントした場合は「2」を返却します。
(ECC6.0以降(US ※1)について最初の文字の文字数となるため必ず値「1」を返すが、代理領域からユニコードの 2 バイト文字で始まる場合は値「2」を返すらしい。(値「2」を返す事例を見たことがないため真偽が分からず不明))

※1:US – Unicode Systems
※2:NUS – Non Unicode Systems

命令文

命令文としては以下の通りです。
変数Bに文字列の値を格納し、変数Aに最初の文字の長さが格納されます。

変数A = CHARLEN( 変数B ).

特徴

CHARLEN命令を使用する時にエラーとなる原因や注意点は以下の通りです。

  • データ型はC,N,D,TまたはSTRINGでなければならない。
  • データ型がNの場合は前0が自動付与され、前0を最初の文字として認識するため注意
  • 初期値の場合でも値「1」を返す。(NUSでは未確認)
  • USでは文字数をカウントし、NUSではバイト数をカウントする。

プログラム例

サンプルプログラムの結果はUS環境となります。

DATA: L_CHARLENA(10) TYPE C       VALUE 'あいab ',
      L_CHARLENB(10) TYPE C       VALUE '   ',  "半角空白文字のみ
      L_CHARLENC(10) TYPE N       VALUE '5',
      L_CHARLEND     TYPE STRING  VALUE '123abcあいう',
      L_CHARLENE(10) TYPE C,
      L_CLENA TYPE I,
      L_CLENB TYPE I,
      L_CLENC TYPE I,
      L_CLEND TYPE I,
      L_CLENE TYPE I.


L_CLENA = CHARLEN( L_CHARLENA ).
L_CLENB = CHARLEN( L_CHARLENB ).
L_CLENC = CHARLEN( L_CHARLENC ).
L_CLEND = CHARLEN( L_CHARLEND ).
L_CLENE = CHARLEN( L_CHARLENE ).

WRITE:/ 'L_CLENA', L_CLENA, L_CHARLENA,
      / 'L_CLENB', L_CLENB, L_CHARLENB,
      / 'L_CLENC', L_CLENC, L_CHARLENC,
      / 'L_CLEND', L_CLEND, L_CHARLEND,
      / 'L_CLENE', L_CLENE, L_CHARLENE.

以下出力結果
L_CLENA 1 あいab
L_CLENB 1
L_CLENC 1 0000000005
L_CLEND 1 123abcあいう
L_CLENE 1