6

输入文件如下所示:

狗,白,男
猫,紫色,女性
大鼠,灰色,男性

我想逐行处理这些数据并做一些事情。

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 和诸如此类的东西来操作数据线,并在最后打印出来。

谢谢

4

3 回答 3

7
require 'csv'
CSV.foreach("animals.csv") do |row|
  puts 'dogs are cool' if row[0] == 'dog'
  puts "your animal is a #{row[0]}"
end
于 2012-04-19T20:47:19.103 回答
2

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

于 2012-04-19T20:40:22.790 回答
0

你可以使用块的魔法来清理你的行阅读代码。下面的代码将为您关闭您的句柄,并一次获取每一行,而无需太多额外的缓冲。

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

如前所述,有一个 CSV 库,但如果您的数据不复杂,没有嵌入的逗号和诸如此类的东西,那么上述是合理的。

另请注意,您要与字符串“dog”进行比较,而不是与某个名为 dog 的变量进行比较。要使字符串将字母括在引号中,否则 ruby​​ 会认为它是一个变量或者可能是一个方法调用。

if currentline[0] == "dog"
于 2012-04-19T20:43:39.977 回答