Tengo un archivo CSV llamado "A.csv". Necesito generar un nuevo archivo CSV llamado "B.csv" con datos de "A.csv".
Usaré un subconjunto de columnas de "A.csv" y tendré que actualizar los valores de una columna a nuevos valores en "B.csv". En última instancia, usaré estos datos de B.csv para validarlos con una base de datos.
- ¿Cómo creo un nuevo archivo CSV?
- ¿Cómo copio los datos de las columnas requeridas de A.csv a "B.csv"?
- ¿Cómo agrego valores para una columna en particular?
Soy nuevo en Ruby, pero puedo leer CSV para obtener una matriz o hash.

Respuestas:
Como señaló mikeb, existen los documentos: http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html - O puede seguir los ejemplos a continuación (todos están probados y trabajando):
Para crear un nuevo archivo:
En este archivo tendremos dos filas, una fila de encabezado y una fila de datos, CSV muy simple:
require "csv" CSV.open("file.csv", "wb") do |csv| csv << ["animal", "count", "price"] csv << ["fox", "1", "$90.00"] endresultado, un archivo llamado "file.csv" con lo siguiente:
animal,count,price fox,1,$90.00Cómo agregar datos a un CSV
Casi la misma fórmula que la anterior, pero en lugar de usar el modo "wb", usaremos el modo "a +". Para obtener más información sobre estos, consulte esta respuesta de desbordamiento de pila: ¿Cuáles son los modos y opciones de Ruby File.open?
CSV.open("file.csv", "a+") do |csv| csv << ["cow", "3","2500"] endAhora, cuando abrimos nuestro archivo.csv tenemos:
animal,count,price fox,1,$90.00 cow,3,2500Leer de nuestro archivo CSV
Ahora sabe cómo copiar y escribir en un archivo, leer un CSV y, por lo tanto, tomar los datos para manipularlos:
CSV.foreach("file.csv") do |row| puts row #first row would be ["animal", "count", "price"] - etc. endPor supuesto, esta es una de las cientos de formas diferentes en las que puede extraer información de un CSV usando esta joya. Para obtener más información, sugiero que visite los documentos ahora que tiene un manual: http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html
fuente
¿Has visto la clase CSV de Ruby? Parece bastante completo. Compruébelo aquí: http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html
fuente
Probablemente querrá usarlo
CSV::parsepara ayudar a Ruby a entender su CSV como la tabla de datos que es y permitir un fácil acceso a los valores por encabezado.Desafortunadamente, la documentación
CSV::parsedisponible sobre el método no deja muy claro cómo usarlo para este propósito.Tuve una tarea similar y me ayudó mucho más Cómo leer y analizar archivos CSV con Ruby en rubyguides.com que la documentación de la clase CSV o las respuestas que apuntan a ella desde aquí.
Recomiendo leer esa página en su totalidad. La parte crucial es transformar un CSV dado en un
CSV::Tableobjeto usando:table = CSV.parse(File.read("cats.csv"), headers: true)Ahora hay documentación sobre la
CSV::Tableclase , pero nuevamente los ejemplos claros en la página rubyguides.com pueden ayudarlo más. Una cosa que destacaré es que cuando dices.parseque esperes encabezados, la tabla resultante tratará la primera fila de datos como una fila[0].Probablemente le interese especialmente el
.by_colmétodo disponible para su nuevoTableobjeto. Esto le permitirá iterar a través de diferentes posiciones de índice de columna en la entrada y / o salida y copiar de una a otra o agregar un nuevo valor a la salida. Si consigo que funcione, volveré y publicaré un ejemplo.fuente