とちぎRuby会議07
2017-08-26
とみたまさひろ
Ruby歴 約20年
(本日の老害枠の一人)
得意分野: 文字化け
その昔RubyのCSVは遅かった
みんな大好き KEN_ALL.CSV
% ruby -v -rcsv -e 'CSV.foreach("KEN_ALL.CSV"){}'
ruby 1.8.7 (2013-06-27 patchlevel 374) [x86_64-linux]
real 0m33.732s
user 0m33.712s
sys 0m0.016s
LightCsvってのを作ったんですよ
% ruby -v -rlightcsv -e 'LightCsv.foreach("KEN_ALL.CSV"){}'
ruby 1.8.7 (2013-06-27 patchlevel 374) [x86_64-linux]
real 0m3.336s
user 0m3.312s
sys 0m0.020s
速い!
でも最近は普通に速い
% ruby -v -Ecp932 -rcsv -e 'CSV.foreach("KEN_ALL.CSV"){}'
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]
real 0m2.869s
user 0m2.836s
sys 0m0.020s
LightCsvはお役御免
でも一つ問題が
nilを返しやがる!
require 'csv'
'a,"",b,,c'.parse_csv
#=> ["a", "", "b", nil, "c"]
考慮しないとぬるぽ
require 'csv'
'a,"",b,,c'.parse_csv.each do |col|
p col.upcase
end
"A"
""
"B"
a.rb:4:in `block in <main>':
undefined method `upcase' for nil:NilClass (NoMethodError)
ということでnilを返さないCSVライブラリを作った
require 'rightcsv'
'a,"",b,,c'.parse_csv
#=> ["a", "", "b", "", "c"]
'a,"",b,,c'.parse_csv.map(&:upcase)
#=> ["A", "", "B", "", "C"]
こんなの使わなくてもみんなが幸せになりますように