2017-04-05 68 views
0

我试图解析其中我从Nexpose的API调用CSV报告:如何解析CSV基于IF条件

nsc.list_reports.each do | report | 
    puts report.name 
    report_id = report.config_id 
    report_summary = nsc.generate_report(report_id, true) 

    report = nsc.download(report_summary.uri) 
    puts report  


    csv = CSV.read(report, :headers => true, :converters => :all).select do|row| 
    row['number available'] > 0 && row['Score'] >=9 
    end 

    csv.each do |row| 
    puts row['name'] 
    end 
end 

但基本上这是它给了我

格式
ID,name,title,Score,number available 
1,"test1","title1",4,3 
2,"test2","title2",8,0 
3,"test3","title3",9,0 
4,"test4","title4",10,6 
5,"test5","title5",5,22 
6,"test6","title6",9,1 
7,"test7","title7",2,5 

我的目标是只找到那些有“分数”> = 9和“可用数量”> 0的人。因此在这个例子中,它应该返回'test4'和'test6'

+0

_WHAT_ CSV你想解析?请阅读“[mcve]”和链接页面。我们需要展示问题的最小代码,支持显示问题和预期输出的代码的最小输入(CSV)。你给了我们预期的产出,但没办法达到目的。 –

回答

0

不要将标题转换为符号;使用select,而不是detect;和一些小的细节:

csv = CSV.read(report, :headers => true, :converters => :all).select do|row| 
    row['number available'] > 0 && row['Score'] >=9} 
end  

csv.each do |row| 
    puts row["name"] 
end 
+0

from C:/Ruby22-x64/lib/ruby/2.2.0/csv.rb:1256:in'open' \t from C:/Ruby22-x64/lib/ruby/2.2.0/csv.rb:1256 :在'open' \t from C:/Ruby22-x64/lib/ruby/2.2.0/csv.rb:1330:在'read' \t from C:/Users/1/RubymineProjects/nexpose/main.rb :26:在<顶部(必填)>中的块中 \t从C:/Users/RubymineProjects/nexpose/main.rb:18:在'each'中 \t from C:/ Users/RubymineProjects/nexpose/main。 rb:18:在' \t from -e:1:in'load' \t from -e:1:in'

' – encrypt

+0

试着在你的'puts报告之后复制粘贴这段代码'线 – steenslag