如何解析CSV文件,更新字段,然后保存

我需要读取CSV文件,更新字段,然后保存更改。 除了将更改保存到我正在更新的字段之外,我的一切工作正常:

require 'csv' @parsed_file = CSV::Reader.parse(File.open("#{RAILS_ROOT}/doc/some.csv")) @parsed_file.each_with_index do |row, x| address = row[5] l = Location.address_find(address) if l != nil puts "#{l.name} at #{l.address}" row[14] = l.store_code puts row[14] else puts "No matching address Found!!!" end #What do I do here? Something like this? CSV::Writer.generate(@parsed_file) end 

我该怎么办? 如何保存我所做的更改并更新文件?

我要做的是将更新的记录写入新文件,然后,如果需要,在完成程序后可以删除旧文件并将新文件重命名为原始文件名。

为此,我将在each_with_index循环之外的代码顶部打开输出文件。 例如

 csv_out = CSV::Writer.generate(File.open('new.csv', 'wb')) 

然后在each_with_index循环中,您可以将当前行写入新文件,如下所示:

 csv_out << row 

然后在最后你可以关闭新文件:

 csv_out.close 

如评论中所述, CSV::Writer不再位于标准库中。 使用较新的CSV.foreach (用于阅读)和CSV.open (用于写入)的代码的等效版本是:

 CSV.open("path/to/file.csv", "wb") do |csv_out| CSV.foreach("#{RAILS_ROOT}/doc/some.csv") do |row| address = row[5] l = Location.address_find(address) if l != nil puts "#{l.name} at #{l.address}" row[14] = l.store_code puts row[14] else puts "No matching address Found!!!" end csv_out << row end end