概要
最初の文字の長さを数値で返す命令となります。
注意点としては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