How to parse a CSV file, update a field, then save

后端 未结 1 1601
终归单人心
终归单人心 2020-12-03 05:51

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         


        
相关标签:
1条回答
  • 2020-12-03 06:28

    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_index loop. e.g.

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

    Then inside your each_with_index loop you can write the current row to the new file like this:

    csv_out << row
    

    Then at the end you can close the new file:

    csv_out.close
    

    As mentioned in the comments, CSV::Writer is no longer in the standard library. An equivalent version of the code using the newer CSV.foreach (for reading) and CSV.open (for writing) is:

    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
    
    0 讨论(0)
提交回复
热议问题