COBOL2002 言語 拡張仕様編

[目次][索引][前へ][次へ]

24.2.1 COUNT-CHAR関数

COUNT-CHAR関数は,引数1に指定された文字列の文字数を返す。この関数の型は,整数とする。

なお,この組み込み関数を使用するためには,-UniObjGenオプションの指定が必要である。-UniObjGenオプションについては,マニュアル「COBOL2002 ユーザーズガイド」またはマニュアル「COBOL2002 使用の手引 手引編」のUnicode機能を参照のこと。

<この項の構成>
(1) 一般形式
(2) 引数
(3) 関数値
(4) 使用例

(1) 一般形式

[図データ]

(2) 引数

  1. 引数1は,字類が英字か英数字,または日本語でなければならない。
  2. 引数1に可変長集団項目を指定してはならない。
  3. 引数1に動的長基本項目を指定してはならない。
  4. 引数1の文字コードは,次のどちらかでなければならない。
    字類 文字コード
    英字,英数字 UTF-8
    日本語 UTF-16
  5. 引数1が英数字集団項目のとき,その従属項目の字類は,英字または英数字でなければならない。

(3) 関数値

  1. 関数値は,次のとおりである。
    (ア)WIDTHが指定されている場合
    関数値は引数1の長さを見た目幅で表した整数となる。
    (イ)WIDTHが指定されていない場合
    関数値は引数1の長さを文字数で表した整数となる。
  2. 関数値の表現形式は,2進形式4バイト(64bit版COBOL2002では2進形式8バイト)となる。

(4) 使用例

(a) シフトJISでの文字数の取得

シフトJISでは,バイト数,文字数,けた数の関係が決まっている。英数字項目は半角1文字を1バイトで1けた,日本語目は全角1文字を2バイトで1けたである。そのため,文字数を意識したプログラミングは比較的に容易である。

例えば,次のように3けたの英数字項目に格納されている半角の文字数は3文字,3けたの日本語項目に格納されている文字数は3文字である。

 
   01 TEST-DATAX PIC X(10) VALUE 'アイウ'.
   *> 3文字
   01 TEST-DATAN PIC N(3) VALUE N'あいう'.
   *> 3文字
 

次のデータ項目の後ろ空白を除いた文字数を求める文の例を示す。

 
   01 TEST-DATA1 PIC X(10) VALUE 'アイウ'.
 

[図データ]

記述例
[図データ]
(b) Unicodeでの文字数の取得

Unicodeの場合は,文字数とけた数の関係が定まらないため,けた数から文字数を容易に求めることができない。そこで,引数に指定されたUnicodeのデータ項目の文字数を返すCOUNT-CHAR関数を使用する。

COUNT-CHAR関数を使用して,次のUTF-8のデータ項目の後ろ空白を除いた文字数を求める文の例を示す。

 
   01 TEST-DATA1 PIC X(10) VALUE 'アイウ'.

記述例
[図データ]
(c) Unicodeでの見た目幅の取得

シフトJISでは,英数字項目にLENGTH関数を適用すると,けた数が返る。英数字項目では1けたは半角1文字分となる。また,全角日本語は2けたを占めるため,半角2文字分となる。

Unicodeでは,COUNT-CHAR関数を英数字項目に適用し,引数のWIDTHを指定した場合,半角文字での見た目幅が返却される。COUNT-CHAR関数を使用することで,英数字項目の場合,シフトJISと同様に見た目幅で扱うことができるため,既存のシフトJISを前提としたプログラムからの移行が容易となる。

シフトJISの場合とUnicodeの場合とで,次のデータ項目の見た目幅を取得する文の例を示す。

 
   01 TEST-DATA1 PIC X(8) VALUE 'AあC'.
   *> "あ"は,見た目幅2
 

[図データ]

記述例
[図データ]