<a href="http://blade.nagaokaut.ac.jp/ruby/ruby-list/thr42416-42472.html#42454">ファイルを全部読み込んでから処理するか、一行ずつ読ませるか</a>

ruby-listで、最初は複数の正規表現を使って、どの表現にどのデータがマッチしたか区別しながら処理するにはどうしたら…みたいな話題が、途中から、でっかいファイルを逐行処理させる方法、という話に重点が移っていった。今まさにそういうコードを何度も何度も書いているので、かなり興味深く読んでいる。いろんなやり方があるのね。個人的には、

  • 小さなファイルはIO.readlines.each
  • 大きなファイルはfile=File.newしてからfile.each_line

と分けている。メモリにあまり負担をかけたくないという気持ちがあるので。なにしろたくさんの人間が同時に使っているサーバだからなあ…。とか貧乏臭いことを気にしているのです。どっちみちブロックになるから、処理の中身、書き方は一緒というか。気分が変わればイテレータを書き直すだけだし。いい加減だな俺。
ていうか、IO.foreachなんてものがあるんですか!知らなかったよ!closeをensureしてくれるとわ!いいねこれ!早速いま書いてるコードを見直そう!

ちょっと違うな

上の使い分けはちょっと良くないなあ。

  • IO.readlinesは後で全体を(何か加工したにしても全体の結果を)後でまた使いたいとき
  • IO.foreachは全体を使って一度だけ何かをやり、ファイルの内容自体は使い捨てにしたいとき

という風に使い分けるのかな、と、漠然と思った。