Perlで全角文字の文字数を数えるには?

[上に] [前に] [次に]
ふに 1998/09/28(月) 15:08:49
Perl5で全角文字の文字数を数えようとして、lengthを使ったところ
全角文字*2の数が帰ってきます。どうも純粋なバイト数を返しているようです。
全角・半角入り交じった文字列を数えなければいけないため、
単純に2で割る訳にもいかず困っています。

どなたか教えていただけますでしょうか。

perl -v
This is perl, version 5.004_04 built for sun4-solaris

文字コードはEUCです。

よろしくお願いします。

Tiot [E-Mail] 1998/09/28(月) 17:42:19
jcode.plを使ってすべて全角にしておいてから、文字数を数えて2で割るというのはどうでしょう?
../199809/98090081.htm
を参照にしてください(まだ解決していませんが)。
あとは正規表現で半角だけ、全角だけと分離しておいてから、別々に数えておいて足しあわせてもいいかも。
ちなみにjperlを使ってもバイト数で返されてしまいます。
こういった用途の、ライブラリかモジュールかを探せば有るかも知れません。
ご存知の方がいらっしゃったら教えて下さい。
#solarisうらやましいな。

匿名希望 1998/09/28(月) 19:19:02
検査対象が$lineに入っているとして、

$n = $line =~ tr/\xa1-\xfe/\xa1-\xfe/;

この$nを2で割った値が全角文字の字数です。これはよく使われる
技法です。
manに載っている例では、*の個数を数えるには tr/*/*/

ふに 1998/09/28(月) 19:53:27
[[解決]]
Tiotさん、匿名希望さん 早速のお応えありがとうございました。
おかげさまで、全角文字の文字数を取り出すことができました。

この方法だと、半角文字はカウントされないんですね。気をつけなければ・・・


Tiot 1998/09/28(月) 21:40:05
>この方法だと、半角文字はカウントされないんですね。
$m = $a =~ tr/\x00-\x7f/\x00-\x7f/;
で、半角文字数です。
コントロール+英数字や空白を入れないなら\x21-\x7e。
念のため。
#とか言いながら僕もさっきまでこの方法を知りませんでした。
ありがとうございます。>匿名希望さん

[上に] [前に] [次に]