Étant relativement nouveau à Ruby, j'essaie de comprendre comment faire ce qui suit en utilisant FasterCSV: Ouvrez un fichier CSV, choisissez une colonne par son en-tête, dans cette colonne seulement remplacer tous occurrences de chaîne x avec y, écrivez le nouveau fichier dans STDOUT. Le code suivant fonctionne presque:Remplacer du texte dans une colonne CSV en utilisant FasterCSV
filename = ARGV[0]
csv = FCSV.read(filename, :headers => true, :header_converters => :symbol, :return_headers => true, :encoding => 'u')
mycol = csv[:mycol]
# construct a mycol_new by iterating over mycol and doing some string replacement
puts csv[:mycol][0] # produces "MyCol" as expected
puts mycol_new[0] # produces "MyCol" as expected
csv[:mycol] = mycol_new
puts csv[:mycol][0] # produces "mycol" while "MyCol" is expected
csv.each do |r|
puts r.to_csv(:force_quotes => true)
end
Le seul problème est qu'il ya une conversion d'en-tête où je ne m'y attendais pas. Si l'en-tête de la colonne choisie est "MyCol" avant la substitution des colonnes dans la table csv c'est "mycol" après (voir les commentaires dans le code). Pourquoi cela arrive-t-il? Et comment l'éviter? Merci.
Merci Greg. Lorsque vous écrivez la chose qui aide est de manipuler la colonne de choix directement au lieu de construire une nouvelle colonne et ensuite essayer de remplacer la colonne existante par la nouvelle (voir le code ci-dessous). – Stefan