Ruby:如果满足条件,则写入CSV

时间:2016-02-01 04:12:56

标签: ruby csv

我是Ruby的新手,并使用它来尝试读取/写入csv。到目前为止,我有一个脚本执行以下操作:

  1. 从CSV文件导入数据,将选择列存储为单独的数组(我不需要每列的数据)
  2. 对数据执行计算,将结果存储在新创建的数组中
  3. 将数组转换为表行,以输出到csv

    table = [Result1, Result2, Result3].transpose
    
  4. 目前,我可以使用以下内容输出表格:

         CSV.open(resultsFile, "wb",
        :write_headers=> true,
        :headers => ["Result1", "Result2", "Result3"]
          ) do |csv|
          table.each do |row|
             csv << row 
          end
    

    我的问题是,如何添加条件仅输出其中一个结果等于某个文本字符串的行。例如,如果result2中的值等于“Apple”,我希望将该行中的数据写入csv文件。如果没有,那就跳过那一行。

    我尝试将if / else放在几个不同的区域并且没有取得任何成功。

    感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

header = ["Result1", "Result2", "Result3"]
CSV.open(resultsFile, "wb", :write_headers=> true, :headers => header) do |csv|
    table.each do |row|
        csv << row if header.zip(row).to_h["Result2"] == "Apple"
    end
end

zip合并两个数组并生成数组数组,其中每个子数组都有来自相同索引的输入数组的元素,to_h可以将任何2元素数组的数组转换为哈希。例如:

row = ["Orange", "Apple", "Guava"]
header = ["Result1", "Result2", "Result3"]

header.zip(row).to_h
=> {"Result1"=>"Orange", "Result2"=>"Apple", "Result3"=>"Guava"}