カレッヂ |
質問者 谷口
投稿日 6/26(火) 21:33:42
全角文字A−Z、0−9、−を半角文字に一括変換できませんか? また、文字列の中に全角、半角が混在している場合、A−Z、a−z、0−9、−は半角に それ以外の文字がはいている場合文字列をスペースにする簡単な方法は有りませんか? |
回答者 しあわせのツボ
[削除]
投稿日 6/27(水) 00:42:53
jcode.plにあるjcode::trが使えると思います。 ただ、この機能は発展途上であるとのアナウンスがあり、事実いくつかの制限(sjisでは使えない等)がありますので、jcode.plのドキュメントを熟読した上で利用して下さい。 |
質問者 谷口
[削除]
投稿日 6/27(水) 07:03:33
ありがとうございます。 SJISで同等の処理を行いたいのですが他に手段はないですかね? |
回答者 あけび
[削除]
投稿日 6/27(水) 11:45:03
あまり効率は良くないかもしれませんが、こんなのはどうでしょう。 sub lwr { local(*_) = @_; s/([\x80-\x9f\xe0-\xff].)/$1\0/g; # 2バイト文字の後ろに\0挿入 s/\x82([\x4f-\x58\x60-\x79])/pack("C",ord($1)-0x1f)/eg; # 0-9,A-Z 半角変換 s/\x82([\x81-\x9a])/pack("C",ord($1)-0x20)/eg; # a-z 半角変換 s/\x81\x7c/-/g; # − 半角変換 s/[\x80-\x9f\xe0-\xff].\0/ /g; # 非該当全角文字をスペース(非該当半角文字)に変換 tr/\0//d; # 残った\0を削除 tr/0-9a-zA-Z\-/ /cs; # 非該当文字列をスペースに変換 $_; } 使い方は、例えば変数 $str を変換したい場合は &lwr(\$str); となります。 |
回答者 呑兵衛
[削除]
投稿日 6/27(水) 20:34:25
呑兵衛といいます。 事例その2. # $values を入力文字列とします。 # jcode.pl を呼び出せることが前提です。 # shift_jisコードの全角文字 $zenkaku = 'A-Za-z0-9−ー'; # $zenkaku をeucコードに変換しておく $code_e = &jcode::euc($zenkaku, 'sjis'); # $zenkaku の対応半角 $hankaku = 'A-Za-z0-9--'; # shift_jisで入力された文字列をeucに変換 $values = &jcode::euc($values, 'sjis'); # 全角だけ半角にeucに置換 $values = &jcode::trans($values, $code_e, $hankaku); # 対象文字以外をスペースに置換 $values =~ s/[^0-9A-Za-z-]+/ /g; # 後続のためにshift_jisに変換 $values = &jcode::sjis($values); |
質問者 谷口
[削除]
投稿日 6/28(木) 14:49:19
うまく処理できました。 皆さん、ご親切にありがとうございました。 |
このページは終了したので返信(回答)は書きこめません
Web裏技 |