読者です 読者をやめる 読者になる 読者になる

Rubyに翻弄された日

Ruby

はてなのCSV形式エクスポートデータをXML形式に変換するスクリプトを作ったけどうまくインポートできませんでしたの続きに取り組んでいたところ、Rubyでいろいろ困る羽目になってもうRuby面倒になってきた。

とりあえずきれいなXMLを出力してみようと思いREXML::Formatter::Prettyを使ってみるとエラーになってしまう。いろいろ調べたところ、どうやらXML中に「スペースをひとつも含まない」要素があるとエラーになるようだ。英語圏のライブラリだから分かち書き前提なのかなぁ。

どっかの掲示板に書いてあったように ruby/lib/ruby/1.8/rexml/formatters/pretty.rb の130行目あたりを↓の感じで書き換えてみたら動いてくれた。

#        place = string.rindex(' ', width) # Position in string with last ' ' before cutoff
        place = string.rindex(' ', width) || width # Position in string with last ' ' before cutoff

しかし、これではマルチバイト文字の途中だろうがなんだろうがwidthバイト目でぶった切られてしまう。日本語が悲しい感じなるのでこれじゃだめ。暇なら自分でまともなパッチ書くけど、本筋からそれてしまうのでやめ。

で、REXMLをあきらめて代わりにHpricotを使おうと思ってソースをダウンロードし、ruby setup.rbしたらlibzipが無いと言われて怒られた。うげー。拾ってくればいいのかもしれないけど、Windows版GTK2とライブラリがバッティングしちゃう問題*1が起きそうなので避ける。

こうなったらCentOS 5.2 (final)の環境があるのでWindowsをやめてそちらでgemをインストールしようと思ったら、yum search gemしてもgemが見つからない。標準のリポジトリには含まれていないのか?

と、ここまで来て今日は時間切れ。何も進んでない。しかももう眠い。ふて寝する。

今日の感想 : Rubyマジ面倒。なんだかんだと言われようとも必要そうなライブラリを標準で同梱しているPHPがやっぱり楽。

*1:ruby/binにPATHを通していたりすると、Windows版GIMP2を使おうとしたときに、GIMPruby/binのzlib1.dllを読み込んでしまってライブラリのバージョン違いにより困ったことになる現象のこと。これがDLL HELLってやつか