我是Ruby的新手,并使用它来尝试读取/写入csv。到目前为止,我有一个脚本执行以下操作:
将数组转换为表行,以输出到csv
table = [Result1, Result2, Result3].transpose
目前,我可以使用以下内容输出表格:
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放在几个不同的区域并且没有取得任何成功。
感谢您的帮助
答案 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"}