sway
sway

Reputation: 373

How do I, line by line, turn a csv into an array using Ruby?

input file looks like:

dog,white,male
cat,purple,female
rat,gray,male

and i want to go through and do things with that data, line by line.

File.open("animals.csv")
  while file has next line
    currentline = array with each cell being an entry in the array
    if currentline[0] == dog
      put "dogs are cool"
    end
    put "your animal is a " + currentline[0]
  end

You get the idea, right? I want to manipulate data line with ifs and whatnot and print it all out at the end.

Thanks

Upvotes: 6

Views: 10141

Answers (3)

Abe Voelker
Abe Voelker

Reputation: 31622

require 'csv'
CSV.foreach("animals.csv") do |row|
  puts 'dogs are cool' if row[0] == 'dog'
  puts "your animal is a #{row[0]}"
end

Upvotes: 9

Paul Rubel
Paul Rubel

Reputation: 27252

You can use the magic of blocks to clean up your line reading code quite a bit. The code below will close your handle for you and also get each line one at a time without too much extra buffering.

IO.foreach("animals.csv") do |line|
   parts = line.split(',')
   ...
end

As noted there is a CSV library, but if your data is not complicated, doesn't have embedded commas and whatenot, the above is reasonable.

Also note that you want to compare to the string "dog" rather that some variable named dog. To make a string enclose the letters in quotes, otherwise ruby will think its a variable or maybe a method call.

if currentline[0] == "dog"

Upvotes: 0

Chris Frazier
Chris Frazier

Reputation: 221

Ruby includes a CSV class that makes parsing and working with CSVs even simpler. Check out: http://www.ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html

Upvotes: 2

Related Questions