I have a CSV file called “A.csv”. I need to generate a new CSV file called “B.csv” with data from “A.csv”.
I will be using a subset of columns from “A.csv” and will have to update one column’s value to new value in “B.csv”. Then I use this data from B.csv to validate at database.
- How do I create a new CSV file?
- How do I copy the required column’s data from A.csv to “B.csv”?
- How do I append values for a particular column?
I am able to read CSV, get an array, or hash.
As mikeb pointed out, there are the docs – http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html – Or you can follow along with the examples below (all are tested and working):
To create a new file:
In this file we’ll have two rows, a header row and data row, very simple CSV:
require "csv" CSV.open("file.csv", "wb") do |csv| csv << ["animal", "count", "price"] csv << ["fox", "1", "$90.00"] end
result, a file called “file.csv” with the following:
How to append data to a CSV
Almost the same forumla as above only instead of using “wb” mode, we’ll use “a+” mode. For more information on these see this stack overflow answer: What are the Ruby File.open modes and options?
CSV.open("file.csv", "a+") do |csv| csv << ["cow", "3","2500"] end
Now when we open our file.csv we have:
animal,count,price fox,1,$90.00 cow,3,2500
Read from our CSV file
Now you know how to copy and to write to a file, to read a CSV and therefore grab the data for manipulation you just do:
CSV.foreach("file.csv") do |row| puts row #first row would be ["animal", "count", "price"] - etc. end
Of course this is like one of like a hundred different ways you can pull info from a CSV using this gem. For more info I suggest visiting the docs now that you have a primer: http://ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html
Have you seen Ruby’s CSV class? It seems pretty comprehensive. Check it out here: