練習 3-3
文字列を置換する練習問題。
もうちょっとシンプルに変換
File#open で外部と内部の文字コードを指定。
読み込んだ文字列は内部コードに変換済み。
1行ずつ変換するよりも効率がよい (と信じてる*1 )
# -*- coding: utf-8; -*- RUBY_VERSION # => "1.9.2" open('wagahaiwa_nekodearu.txt', 'r:cp932:utf-8') do |f| f.each_line do |buf| puts buf.gsub(/。/, 'にゃん。') end end
変換いくない
そもそも入力した内容を変換するのがよくなくないか?
# -*- coding: utf-8; -*- RUBY_VERSION # => "1.9.2" regex = /#{'。'.encode(Encoding::CP932)}/ dst = 'にゃん。'.encode(Encoding::CP932) open('wagahaiwa_nekodearu.txt', 'r:cp932') do |f| f.each_line do |buf| puts buf.gsub(regex, dst) end end
コード変換がループの外にあるから効率がよい (と信じてる*2 )
Regexp.new('。', Encoding::CP932) とか Regexp#encode(Encoding::CP932) とかできるといいのにね。
/regex/s とかしても文字列を CP932 に変換してくれない。
それ意味なくない?
元の文字コードも CP932 だったら、わざわざ s とか付けないでしょ。普通。