文字数を調べる

文字数を調べるのに Length関数は使えません。文字列が半角のみである場合は Length関数でも正しい結果を返しますが、全角文字が混在した場合は実際の文字数より多い値を返します。それは Length関数は文字数ではなくバイト数を返す関数だからです。例えば「あ」は一文字でも2バイトなので2を返します。これを1で数える、要するに文字の数を調べるには ByteToCharLen関数を使用します。この関数には2つの引数が必要です。最初に調べる文字列、次に調べる長さです。通常は Length(調べる文字列)でいいと思います。もうちょっと簡単な方法では文字列を WideString型にキャストしてその結果の Lengthを調べる方法です。

■ 文字数を調べる例 ByteToCharLen関数の場合
begin
  strData         :=    'Delphiデルファイ';
  { バイト数 }
  Label1.Caption  :=    IntToStr(  Length(strData)   );
  { 文字数 }
  Label2.Caption  :=    IntToStr(  ByteToCharLen(strData, Length(strData))   );
end;

■ 文字数を調べる例 WideStringにキャストした場合
begin
  strData         :=    'Delphiデルファイ';
  { バイト数 }
  Label1.Caption  :=    IntToStr(  Length(strData)   );
  { 文字数 }
  Label2.Caption  :=    IntToStr(  Length( WideString(strData))   );
end;