在 CSV 处理中处理 nil 的优雅方法



我正在使用以下代码进行一些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

最新更新