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のドキュメントに具体的に書かれていない。以下引用。

[PARAM] options:
CSV.new のオプションと同じオプションを指定できます。 :encoding というキーを使用すると入力のエンコーディングを指定することができます。 入力のエンコーディングEncoding.default_external と異なる場合は 必ず指定しなければなりません。

http://doc.ruby-lang.org/ja/1.9.3/class/CSV.html#S_READ
  • CSV.newのドキュメントにも書いてない。