Length関数について教えて下さい。
環境:Delphi2005です。
Length('ABCあいう')ってすると、
[6]を返すのですが
どうして[9]ではないのでしょうか...。
戻り値はByteなので、超普通にやれば[9]です。
本当に
>Length('ABCあいう')
ってやってます。?
WideStringなら[6]ですけど。
ShowMessage(IntToStr(Length('ABCあいう')));//→9
ShowMessage(IntToStr(Length(WideString('ABCあいう'))));//→6
suzu_rinさん
こんにちは
.net VCLでは、
言われているとおり
文字数が 返ってくるようですね
Borland.Vcl.SysUtils.CharLength
CharLength 関数は,文字で使用されるバイト数を返します。
を使えば できそうなきもしますが・・・
バイトを求める関数あったと思うのですけど
忘れました(^_^;
文字列のバイト数を取得するには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/012strcount/strcount.html
lengthのヘルプがヘルプに載っていませんでの
詳しい方からの返事を待ってくださいね。
・・・・.NETか。
Syake様
ご回答ありがとうございます。
本当に Length('ABCあいう') ってやってます。
環境に .NET を書くのを忘れていました。スミマセン...
大豆くん様
ご回答ありがとうございます。
CharLengthを使って文字列の文字数分だけループさせて
カウントする関数を作ればできそうですー。
ところで Length って
どうして使えなく(未定義とかじゃなく文字通り使えない…)
なったんですか...?
使えなくなったわけではありません。
Helpにこうあります。
1 バイトおよびマルチバイト文字列の場合,Length は文字列によって使用されるバイト数を返します。Unicode (WideString) 文字列の場合は,バイト数を 2 で割った値が返されます。
UNICODEでは常に2BYTEで表現されます(半角英数も全て)。
つまるところ、.NTEはUNICODEなのでそうなります。
Syake様
ご返信ありがとうございます。
なるほど...UniCodeだからですか。
で、Syake様からのご返信を拝見して、
IntToStr(Length(AnsiString('ABCあいう')));
ってやってみたんですが、コレってありですか...?
まあ良いかもしれませんが、
UNICODEでないと表せない文字は駄目だと思ういますが。
その場合は、結果的に漢字でも「1」になる。
間違って送信してしまった。...続き
つまるところ、そう単純でもないようで・・・
そんなことしたら、思わぬ落とし穴がありそうな。
Syake様
おはようございます。
Syakeさんの仰る、
> 思わぬ落とし穴
って
> UNICODEでないと表せない文字は駄目だと思ういますが。
> その場合は、結果的に漢字でも「1」になる。
というようなときですよね...
.NET(D2005)になってから「くそみたいなHelp」(失礼)しかないので判りません。(使ったこともないし)
結果的にそうなってしまうのでは、そういった目的では推奨はされないでしょう。
また、判ってるのはそのくらいで、他に何があるかはわかりませんし、他には何もないかもしれません。
としか答えようが(^_^;)
Syake 様
確かにD2005になってからヘルプが変ですし、
なんか使いづらいですし…
何度も何度もスミマセンでしたm(_ _*)m
さて、どうしようかな、、、と。
ツイート | ![]() |