How do I, line by line, turn a csv into an array u

2020-07-24 05:55发布

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

标签: ruby parsing csv
3条回答
做自己的国王
2楼-- · 2020-07-24 06:31

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

查看更多
forever°为你锁心
3楼-- · 2020-07-24 06:32

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"
查看更多
The star\"
4楼-- · 2020-07-24 06:40
require 'csv'
CSV.foreach("animals.csv") do |row|
  puts 'dogs are cool' if row[0] == 'dog'
  puts "your animal is a #{row[0]}"
end
查看更多
登录 后发表回答