COBOL2002 言語 拡張仕様編
COUNT-CHAR関数は,引数1に指定された文字列の文字数を返す。この関数の型は,整数とする。
なお,この組み込み関数を使用するためには,-UniObjGenオプションの指定が必要である。-UniObjGenオプションについては,マニュアル「COBOL2002 ユーザーズガイド」またはマニュアル「COBOL2002 使用の手引 手引編」のUnicode機能を参照のこと。
字類 | 文字コード |
---|---|
英字,英数字 | UTF-8 |
日本語 | UTF-16 |
シフト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 'アイウ'.
Unicodeの場合は,文字数とけた数の関係が定まらないため,けた数から文字数を容易に求めることができない。そこで,引数に指定されたUnicodeのデータ項目の文字数を返すCOUNT-CHAR関数を使用する。
COUNT-CHAR関数を使用して,次のUTF-8のデータ項目の後ろ空白を除いた文字数を求める文の例を示す。
01 TEST-DATA1 PIC X(10) VALUE 'アイウ'.
シフト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
All Rights Reserved. Copyright (C) 2003, 2017, Hitachi, Ltd.