How To Do Basic CSV Manipulations In Ruby (RubyShorts)

How To Do Basic CSV Manipulations In Ruby (RubyShorts) - Webdesign Antwerpen

Video

https://www.youtube.com/watch?v=g4BzgFYtrAs

Opening/Creating CSV File

First up, require the CSV library in your file. You don't need to install any gem for it, it comes bundled with your installation of ruby.

require "csv"

Then, to create a new CSV file you're going to;

csv = CSV.open("people.csv", "a+")

This will "open" a CSV file called "people.csv" in read-write mode where new writes will be added to the back of the file (append). If the file doesn't exist yet, it'll create it. Here's an overview of the different modes;

ModesDescription
rRead-only mode. The file pointer is placed at the beginning of the file. This is the default mode.
r+Read-write mode. The file pointer will be at the beginning of the file.
wWrite-only mode. Overwrites the file if the file exists. If the file does not exist, creates a new file for writing.
w+Read-write mode. Overwrites the existing file if the file exists. If the file does not exist, creates a new file for reading and writing.
aWrite-only mode. The file pointer is at the end of the file if the file exists. That is, the file is in the append mode. If the file does not exist, it creates a new file for writing.
a+Read and write mode. The file pointer is at the end of the file if the file exists. The file opens in the append mode. If the file does not exist, it creates a new file for reading and writing.

Adding Data To CSV

# Adding new data
headers = ["name","height", "age","gender"]
CSV.open('file.csv', 'a+') do |row|
 row << headers
end

Reading Data From CSV

# Reading data from CSV
file = CSV.read('exercises.csv', headers: true, header_converters: :symbol, converters: :all)
file.each_with_index do |row, i|
 name = row[:name]
 equipment = row[:equipment]
end

# OR

file = CSV.read('exercises.csv', headers: true, header_converters: :symbol, converters: :all)
file.map {|row| row.to_hash}
=> [{:name=>"Landmine 180's",
  :equipment=>"Barbell",
  :focus=>"Abdominals", 
   ... }]

Options

headers: true # Removes headers from read 
header_converters: :symbol # Allows each header to be accessed by their respective symbol 
converters: :all # Converts each datatype to the correct ruby datatype ex: string representations of integers get converted into integer

Resources

Comments