2015年4月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
無料ブログはココログ

« 2011年7月 | トップページ | 2011年9月 »

2011年8月の2件の記事

2011年8月31日 (水)

ruby 1.9 / 任意の文字コードでの正規表現

自作ツールの書き直しをしている間に、ruby 1.9 でのノウハウをひとつ見つけました。

ruby 1.9 では script の先頭に magic coment でソースコードの encoding を指定するようになりました。

# encoding: shift_jis

↑これです。

これは別によいのですが、公式のリファレンスを見ても、ソースコード中で、 magic comment で指定した以外の文字コードにマッチする正規表現を生成する方法が明記されていません。

で、恐らく、こういう形でなんとかなるんじゃないかとやってみたら、うまくいきました。直接 /../ や、%r|...| では記述できなくても、Regext.new() で任意の文字コードの文字列から正規表現を作成すればよいわけです。

結局、多少余分のコストはかかるものの、この方法が一番分かりやすく記述できます。

# encoding: shift_jis

regexp = Regexp.new( /本日は/.to_s.encode( "utf-8" ) )

while ( x = gets )
  if regexp =~ x
    print x, "\n"
  end
end

上記のコードで、標準入力から UTF-8 で作成したテキストファイルを流し込んでやれば、ちゃんと"本日は晴天なり"とマッチします。

2011年8月28日 (日)

ruby 1.9 環境への移行

前回の記事から 1 ヶ月以上空いてしまいましたが、この間、ruby 1.9 環境への乗り換えに四苦八苦していました。

前回書いたように、これまでの VMware ではなく、普段使っている (仮想でない) 環境の方を ruby 1.9 & wxruby に移行することにしました。

ところが、普段使いの環境を ruby 1.9 に移行したとたん、(予想通り) 自作のツールがうごかなくなりました。数年前から身の回りのいろいろなデータを rd 形式 で蓄積していて、それを RDtool で html に変換し、自作のツールで再編成して使っています。このツールがうごかないと、仕事にさえ差し支えますので、関連する一連の script を書き直していると 1 ヶ月以上かかってしまいました。

書き直しの殆どの部分は、文字列の encode 対応です。元々、shift_jis やら utf-8 やら、文字コードの異なる複数のファイルを扱うツールだったので、ruby 1.8 までは、自力で文字コードの区別や変換を行っていたのですが、この部分が一切合財書き直しです。出来上がれば、ruby 1.9 では言語組み込みの機能で実装できるので、却ってシンプルになるのですが、Encoding の扱いが分かるまで、結構苦労しました。

web でも、あちこち当たって調べましたが、結局一番参考になったのは、プログラミングRuby 1.9 -言語編- でした。ruby 周りの本はいくつか買いましたが、ruby の言語そのもものについては、最初にオブジェクト指向スクリプト言語 Ruby を買って以降、わざわざ買うまでもないと手を出していませんでした。

ruby 1.6 -> 1.8 はそんなに問題なかったように思いますが、1.8 -> 1.9 はテキスト要りますね。String.encode 以外にも、Enumerator や Fiber など、最初はよく分からなかった機能が増えていますので、もう一度基本に戻って勉強のやり直しです。

« 2011年7月 | トップページ | 2011年9月 »