RubyでTSVファイルを読み込む方法

ruby_icon_314

今日はプチエントリーです。

[2014/7/17 追記]
ruby2.0系でやったらエラーになったので、調べてみたらオプションの指定の仕方変わってました。
下に付け加えます。

rubyでTSVファイルをOPENしたかったのですが、tsvをパースする関数は何じゃい~ と探してて全然見つからなかったです。

もってるリファレンスブックを探しても、CSVクラスは乗ってるんですがTSVはなくてて、、
グーグル先生に聞いてみても、なぜかCSVクラスの説明ばかりHITしました。

いや、私がバカだったんですね。 CSVクラスでTSVもパースできるんですねw
あと、TSV形式自体がマイナーなんでしょう。。
(ん、パワフルなエンジニアは自分でパーサーを書くのかな。。。 いやや。 エスケープされてるタブとか想像しただけで悶絶。。)

やり方は超・シンプル

(1.8の人は)第3引数に区切り文字の”\t”を指定する。
(2.0以上の人は) :col_sepオプションで \t を指定する

(追記:2014/7/28 コメントで2.0の場合の\t がシングルクォートで囲われてるのが違う件を教えていただきましたので直しました。ありがとうございます。)

require 'csv'
require 'pp'

filename = hoge.tsv

# 1.8の人
CSV.open(filename, "r", "\t") do |row|
   pp row
end

# 2.0 の人
CSV.foreach(filename, :col_sep => "\t") do |row|
    pp row
end

ということは、(ほぼ見ないですが)tab以外の区切り文字の何かしらのファイルも読み込めるのでしょう。

各レコード毎にカラムを配列化したArrayちゃんがリターンされてきます。

おわり。

2013-05-15 | Posted in Ruby2 Comments » 


関連記事

コメント2件

 もぎゃ | 2014.07.28 9:03

2.0の例、\tをシングルクオートでくくってるのって変じゃないですか?”\t”じゃないと読めないような。

 altarfの管理人 | 2014.07.28 9:43

あ、本当ですね! すいません、ご指摘ありがとうございます!
修正しましたm(__)m

Comment





Comment



*