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。
念のため。
#とか言いながら僕もさっきまでこの方法を知りませんでした。
ありがとうございます。>匿名希望さん
[上に]
[前に]
[次に]