[[Ruby]]
#contents
* テキスト読み書き今昔物語 [#y88d1e93]
** 読み込み [#uec7ec50]
大昔にRubyでテキストファイルの読みこみって、たとえばこうやってた人は多いかな?
*** 旧読み込み [#c0e25bee]
s = []
open(filename,"r").each{|x|
s[s.length] = x.clone
end
d = s.join("")
でもでも、今ならこんな事しなくていいのよ。
*** 新読み込み(Ruby1.9.3以上?) [#z173be2c]
d = nil
File.open(f) do |x|
d = x.read
end
こんな感じかしら。
** 書き出し [#yf6bd970]
ちなみに、書き出しだって昔は、こんな人多かったんじゃない?
*** 旧書き出し [#sd6b2d51]
open(filename,"w") do |w|
w.print "データ"
end
こっちは、今はこうかしら?
*** 新書き出し(1.9.3以上?) [#p431e68f]
File.write(filename,"データ")
** 読み込み時に文字コード由来のエラーが出る時 [#a0b8fc43]
たとえば、CP932(SJIS)データの読み込みで文句を言われたとするよね?で、変換しながら出したいと。読み込んだデータを配列にしたい時、splitあたりで怒られるのよね。
そんな時には、たとえばこんな風に書いてみるのはどうかしら?
data = nil
File.open(filename) do |file|
data = NKF.nkf("-w",file.read).gsub(/\r/,'').split("\n")
end
一気に読み込みつつ、NKFでUTF-8にしたり、DOS形式のReturnが邪魔なので削除した後、Newline(\n)で分解して配列にしたのね。どんどんメソッドを継ぎ足してパイプ的に連続処理しちゃうところが、いかにもRubyよね。
まぁ、改行まわりの小細工は環境によって違う(特にMac)から、そこは気を付けてね。