我如何逐行使用Ruby将csv转换为数组?

时间:2012-04-19 20:35:29

标签: ruby parsing csv

输入文件如下:

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

我希望逐行完成这些数据的处理。

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

你明白了,对吗?我想用ifs和whatnot操纵数据线,并在最后打印出来。

由于

3 个答案:

答案 0 :(得分:2)

Ruby包含一个CSV类,使得解析和使用CSV更加简单。查看:http://www.ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html

答案 1 :(得分:2)

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

答案 2 :(得分:-1)

您可以使用块的魔力来清理行阅读代码。下面的代码将为您关闭您的句柄,并且每次只能获得一行,而无需额外的缓冲。

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

如上所述,有一个CSV库,但如果您的数据并不复杂,没有嵌入的逗号和whatenot,则上述内容是合理的。

另请注意,您要比较字符串“dog”,而不是名为dog的变量。要使字符串用引号括起来,否则ruby会将其视为变量或方法调用。

if currentline[0] == "dog"