2016-03-29 3 views
3

Ich benutze eine Rake-Aufgabe und das csv-Modul, um eine csv-Schleife zu durchlaufen, die benötigten Daten zu extrahieren und zu ändern und dann jede neue Datenzeile an eine zweite csv anzuhängen. Jedoch scheint jede Zeile die vorherige Zeile in der neuen CSV zu überschreiben/ersetzen, anstatt sie als neue Zeile danach anzuhängen. Ich habe mir die Dokumentation angesehen und gegoogelt, kann aber keine Beispiele finden, wie Zeilen an die CSV anders angehängt werden.Daten werden überschrieben, anstatt an CSV zu hängen

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 

Antwort

3

Ihr Modus, wenn opneing die Datei falsch ist und a+ sein sollte. Weitere Informationen finden Sie in der Dokumentation: http://ruby-doc.org/core-2.2.4/IO.html#method-c-new

Sie können diese Datei auch nur einmal und nicht mit jeder Zeile öffnen.

+0

Danke Thomas! –

Verwandte Themen