Rubyでファイルを読み込む方法が毎回わからなくなるのでメモ
あってる確証がないので信じないでください。
前提
ファイルを読む
Stringを取る
IO.read('filename', :encoding => 'cp932:utf-8') #-> String IO.binread('filename') #-> String
Fileを取る(あとでcloseしなければならない気がする)
File.open('filename', 'r:cp932:utf-8') #-> File File.open('filename', 'rb:ascii-8bit') #-> File File.new('filename', 'r:cp932:utf-8') #-> File File.new('filename', 'rb:ascii-8bit') #-> File
わからなくなるところ
- IO.readなのか、File.readなのか、IO.openなのか、File.openなのか
- エンコーディングを指定しようとすると、:encoding => 'cp932:utf-8' なのか 'r:cp932:utf-8' なのか
- :encoding => "extenc:intenc" ってIO.readのドキュメントに具体的に書かれていない。以下引用。
(中略)
- :encoding
読み込んだ文字列のエンコーディングを指定します。 読み込む長さを指定した場合はこれは無視されます。
これらの他、 :external_encoding など IO.open のオプション引数が指定できます。
http://doc.ruby-lang.org/ja/1.9.3/class/IO.html#S_READ
- IO.openのドキュメントを見ると書いてある。
CSVファイルを読む
配列の配列か、CSV::Tableを取る
require 'csv' CSV.read('filename', :encoding => 'cp932:utf-8') #-> [Array] | CSV::Table
わからなくなるところ
- CSV.new なのか CSV.parse なのか CSV.open なのか CSV.read なのか(ところで、CSV.openした場合は、CSV#closeしなければならない気がする)。
- エンコーディングを指定しようとすると、:encoding => "extenc:intenc" ってCSV.readのドキュメントに具体的に書かれていない。以下引用。
http://doc.ruby-lang.org/ja/1.9.3/class/CSV.html#S_READ
- [PARAM] options:
- CSV.new のオプションと同じオプションを指定できます。 :encoding というキーを使用すると入力のエンコーディングを指定することができます。 入力のエンコーディングか Encoding.default_external と異なる場合は 必ず指定しなければなりません。
- CSV.newのドキュメントにも書いてない。