2011-11-07 4 views
0

Je suis nouveau sur ruby ​​1.9.2. Comment générer un fichier CSV dans un seul fichier script ruby?Comment créer un fichier CSV en utilisant la gemme CSV dans ruby ​​1.9.2?

Ici, j'ai écrit un script Ruby,

require 'rubygems' 
require 'pg' 
require 'active_record' 
require 'csv' 

class AttachEmail 

def generate_csv 
begin 
filename = "csvout.csv" 
users = User.all 
users.each do |u| 
    products = Product.find(:all,:conditions=>["user_id=?",u.id]) 
    CSV.open(filename, 'w') do |csv| 
    # header row 
user_name = u.name 
     csv << ['Report'] 
     csv << ['Name','Product', 'Item Count'] 
     products.each do |product| 
     csv << [user_name, product.title,product.count] 
     end 
end 
end 
rescue Exception => e 
    puts e 
end 
end 
generate= AttachEmail.new 
generate.generate_csv 

Quand je lance ce script.it produira une sortie comme ci-dessous,

  A     B  C 

0  Report 
1  Name,Product,Item Count 
2  user1,PD123,10,990 

Mais je besoin d'une sortie comme, colonne séparée, S'il vous plaît pouvez Tu me parles? Merci à l'avance

+4

Quelle partie de la documentation vous pose des problèmes? http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html –

+0

Salut @mu, j'ai essayé, S'il vous plaît regardez la question éditée ci-dessus. – prabu

Répondre

6

Tout d'abord, vous devez échanger des boucles si vous essayez de mettre toutes les données utilisateur dans le même fichier, et non le remplacer pour chaque utilisateur:

CSV.open(filename, 'w') do |csv| 
    users.each do |u| 
    products = Product.find(:all,:conditions=>["user_id=?",u.id]) 

Ensuite, fixer votre Excel (je soupçonne que la sortie est prise, non?) Pour utiliser la virgule comme un séparateur, pas un "espace ou une virgule".

Revenez avec le contenu du fichier joint et un exemple de fichier CSV qui fonctionne pour vous si cela ne fonctionne toujours pas.

+0

Merci! ça marche. – prabu

Questions connexes