2016-03-29 4 views
3

Я использую задачу rake и модуль csv, чтобы перебрать один csv, извлечь и изменить нужные мне данные, а затем добавить каждую новую строку данных во второй csv. Однако каждая строка, похоже, перезаписывает/заменяет предыдущую строку в новом csv вместо добавления к ней новой строки после нее. Я просмотрел документацию и googled, но не могу найти примеры добавления строк в csv по-разному.Данные переписываются вместо добавления в CSV

require 'csv' 

namespace :replace do 
    desc "replace variant id with variant sku" 

    task :sku => :environment do 
     file="db/master-list-3-28.csv" 

     CSV.foreach(file) do |row| 

      msku, namespace, key, valueType, value = row 

      valueArray = value.split('|') 

      newValueString = "" 
      valueArray.each_with_index do |v, index| 

       recArray = v.split('*') 
       handle = recArray[0] 
       vid = recArray[1] 
       newValueString << handle 
       newValueString << "*" 
       variant = ShopifyAPI::Variant.find(vid) 
       newValueString << variant.sku 

      end 
      #end of value save the newvaluestring to new csv 

      newFile = Rails.root.join('lib/assets', 'newFile.csv') 

      CSV.open(newFile, "wb") do |csv| 
       csv << [newValueString] 
      end 

     end 
    end 
end 

ответ

3

Режим, когда opneing файл неправильно и должен быть a+. См. Подробности в документах: http://ruby-doc.org/core-2.2.4/IO.html#method-c-new

Также вы можете открыть этот файл только один раз, а не с каждой строкой.

+0

Спасибо, Томас! –

Смежные вопросы