我正在使用以下代码进行一些CSV处理...
CSV.foreach(file.tempfile, :headers => true) do |row|
students[row["person_id"]]["start_dates"] << Date.strptime(row["start_date"], '%m/%d/%Y')
students[row["person_id"]]["end_dates"] << Date.strptime(row["end_date"], '%m/%d/%Y')
end
但是,我的一些单元格在我的csv文件中是空白的,并且我的Date.strptime
失败并显示"无法将nil转换为字符串"。处理这个问题的最佳/最优雅的方法是什么?
我希望有一些简洁的东西,比如...
students[row["person_id"]]["last_attend_dates"] << Date.strptime(row["last_attend_date"], '%m/%d/%Y') || ""
。但Ruby不喜欢。
按如下方式构建自定义转换器:
CSV::Converters[:custom] = lambda do |s|
Date.strptime(row["last_attend_date"], '%m/%d/%Y') unless s.nil?
end
然后执行以下操作:
CSV.foreach(file.tempfile, :headers => true, :converters => [:custom]) do |row| ..
另请参阅文档Converters
。