2010-03-05 3 views
1

J'essaie d'interroger une table, d'extraire tous les enregistrements et d'enregistrer le résultat sous la forme d'un fichier CSV. C'est ce que je l'ai fait jusqu'à présent:Enregistrement de la sortie d'une requête dans un fichier texte dans Ruby

require 'OCI8' 
conn = OCI8.new('scott','tiger','020') 
file = File.open('output.csv','w') do |f| 
conn.exec('select * from emp') do |e| 
    f.write log.join(',') 
end 
end 

.. Et alors qu'il fait générer un fichier CSV, le problème est que tous les enregistrements sont sauvés sur une seule ligne. Comment puis-je mettre les données de sorte que chaque enregistrement passe sur une nouvelle ligne?

Répondre

2

Eh bien, vous pouvez utiliser f.puts au lieu de là f.write, mais je vous recommande de jeter un oeil à CSV Module:

http://ruby-doc.org/stdlib/libdoc/csv/rdoc/index.html

outfile = File.open('csvout', 'wb') 
CSV::Writer.generate(outfile) do |csv| 
    csv << ['c1', nil, '', '"', "\r\n", 'c2'] 
    ... 
end 

outfile.close 

PS: En fait, il y a une autre bibliothèque CSV appelé FasterCSV, qui est devenu CSV dans la bibliothèque standard dans Ruby 1.9. Mais en général, tout devrait être mieux que de l'écrire vous-même.

+0

Comment associer chaque colonne à une valeur distincte? Désolé si ce Q semble stupide, mais le traitement des fichiers (& Ruby) est quelque chose que je crains et que j'aimerais surmonter, je me suis dit que ce serait une bonne façon d'apprendre. – Sathya

+0

Je ne comprends pas votre question, que voulez-vous dire par "valeur séparée". Comme je le vois dans les docs OCI8, 'e' dans votre bloc est déjà un tableau, et vous pouvez l'écrire dans la ligne CSV en utilisant' csv << e'. –

+0

Merci pour l'aide, je l'ai fait! – Sathya

Questions connexes