System.SysUtils.CharLength

提供: RAD Studio API Documentation
移動先: 案内検索

Delphi

function CharLength(const S: UnicodeString; Index: Integer): Integer;

C++

extern DELPHI_PACKAGE int __fastcall CharLength(const System::UnicodeString S, int Index)/* overload */;

プロパティ

種類 可視性 ソース ユニット
function public
System.SysUtils.pas
System.SysUtils.hpp
System.SysUtils System.SysUtils


説明

文字が使用しているバイト数を返します。

CharLength を呼び出すと、S 内の Index の位置から始まる文字の、バイト サイズを決定できます。 Index が文字の開始位置でない場合、この関数は、文字全体の長さではなく、文字の残りの部分のサイズを返します。

メモ:Index は、S 内の要素インデックスであり、バイト インデックスでも文字インデックスでもありません。

SAnsiString で、システムがマルチバイト文字セット(MBCS)を使用していない場合、CharLength は常に 1 を返します。

以下の例で、CharLength の操作を示します。

 
type
SJISString = type AnsiString(932);

var
A: SJISString;
L: Integer;

begin
A := 'A' + 'B' + #$82#$A0 + // 日本語のひらがな 'あ'
#$82#$A2 + // 日本語のひらがな 'い'
#$82#$A4 + // 日本語のひらがな 'う'
'C' + 'D';

L := CharLength(A, 1);  // 1 を返す(その位置の文字は 'A')
L := CharLength(A, 2);  // 1 を返す(その位置の文字は 'B')
L := CharLength(A, 3);  // 2 を返す
L := CharLength(A, 4);  // 1 を返す

end.

この例では、インデックスが 1 または 2 のとき、シングルバイト文字の開始位置を指すので、関数は 1 を返します。 インデックスが 3 のとき、2 バイト文字の開始位置を指すので、関数は 2 を返します。 インデックスが 4 の場合、2 バイト文字の後半部分を指すので、関数は 1 を返します。 この例の場合は要素のサイズが 1 であることに注意してください。 2 つの要素が必要な文字もあれば、1 つの要素しか必要ない文字もあります。

一般に、CharLength は、文字列内のマルチバイト文字の開始位置を検索するのに、使用することができます。

この関数は、Unicode の文字にも使用できます。

 
var
U: UnicodeString;
L: Integer;

begin
U := 'abc';
L := SysUtils.CharLength(U, 1); // 2 を返します。
L := SysUtils.CharLength(U, 2); // 2 を返します。

U := #$20BB7; // サロゲート ペア
L := SysUtils.CharLength(U, 1); // 4 を返します。
L := SysUtils.CharLength(U, 2); // 2 を返します。

end.

この例の要素のサイズは 2 で、サロゲート ペア文字は 2 つの要素で構成されていることに注意してください。

文字列が abc の場合、それぞれの文字は単一の 2 バイト要素なので、関数は 2 を返します。 文字列リテラルはデフォルトで Unicode です。

サロゲート ペアでは、インデックスが 1 の場合、文字の最初の要素を指すので、関数は 4 を返します。インデックスが 2 の場合、文字の 2 つ目の要素を指すので、関数は 2 を返します。

関連項目