個人メモ。
TSVをRubyで読み込んでごにょごにょした時のメモ。
以下のようなコードを書いた。
# ! /usr/bin/env ruby
require 'csv'
def check_args
file = ARGV[0]
if file.nil?
puts "Usage: ./tsv.rb [FILE]"
exit 1
end
unless File.exist?(file)
puts "[ERROR] Can't read file. File path = #{file}"
exit 1
end
end
# main
check_args
file = ARGV[0]
csvDatas = CSV.read(file, col_sep: "\t", headers: false)
csvDatas.each do |row|
puts row[0]
puts row[1]
# ...
end
はまったポイント1
CSV.read(file, col_sep: "\t", headers: false)
で '\t'
と書いてしまい、タブ区切りで文字が読み込めなかった。
Rubyではシングルクオートで囲むと\tや\nという感じでエスケープシーケンスが使えため。
はまったポイント2
自分のRubyの環境(2.1)では問題なかったが、1.8を使っている人がエラーに。。。
以下に書いてあるようにCSVクラスの使い方が違ったようである。
(1.8の人は)第3引数に区切り文字の”\t”を指定する。
(2.0以上の人は) :col_sepオプションで \t を指定する
まあとはいえ、2016年1月22日現在1.x系はサポートされていないので、素直にバージョンアップしてくださいという話ではある。。。