[[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)から、そこは気を付けてね。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS