I need to read a CSV file, update a field, then save the changes. I have everything working fine except saving my changes to the field I’m updating:
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
What do I do here? How do I save the changes I made and update the file?
What I would do is write the updated records to a new file and then, if you want, after you have finished your program can delete the old file and rename the new file to have the original file name.
To do this I would open the output file at the top of your code, outside the
each_with_indexloop. e.g.Then inside your
each_with_indexloop you can write the current row to the new file like this:Then at the end you can close the new file:
As mentioned in the comments,
CSV::Writeris no longer in the standard library. An equivalent version of the code using the newerCSV.foreach(for reading) andCSV.open(for writing) is: