我想通过ruby解析csv来创建报告

时间:2017-03-31 21:23:17

标签: ruby csv spreadsheet roo-gem rubyxl

我有一个包含两行的csv报告,其标题为“Date”& “CUSTOMER_NAME”:

["Date", "Customer_Name"]
["Monday", "John"]
["", "David"]
["", "Sam"]
["", "Kenny"]
["Tuesday", "Mary"]
["", "Jade"]
["", "Lindsay"]
["Wednesday", "Tom"]
["", "Lindon"]
["", "Peter"]

我正在尝试打印一份声明,以显示当天的客户是谁,所以它会显示如下:周一有客户John,David,Sam,&肯尼。 \ n 星期二有Mary,Jade和Lindsay

我的代码是:

require 'csv'

col_date = []
col_name = []
custDate = CSV.foreach("customerVisit.csv") {|row| col_date << row[0]}
customer_name = CSV.foreach("customerVisit.csv") {|row| col_name << row[1]}

print "#{col_date} has customers #{col_name} visited the store."

但我没有得到正确的输出,而且很可能是编程的新手..请帮助我如何达到要求?

[“Date”,“Monday”,nil,nil,nil,“Tuesday”,nil,nil,“Wednesday”,nil,nil]有客户[“Customer_Name”,“John”,“David”,“ Sam“,”Kenny“,”Mary“,”Jade“,”Lindsay“,”Tom“,”Lindon“,”Peter“访问了商店.C02S51D2G8WL:RubySQL

此致

1 个答案:

答案 0 :(得分:0)

您可以在此处找到结果的原因&#34;#{array}&#34;,它会按原样插入数组&#39;进入字符串。所以你得到每一组。

我怀疑你使用错误的工具来完成工作。 ruby散列更适合分类数据。 (至少这次)

例如

require 'csv'
customer_hash = {} # {"Date" => "Customers"}

temp = ""
CSV.foreach("customerVisit.csv") { |date, customer|
    temp = date if date
    customer_hash[temp] = [] unless customer_hash[temp]
    customer_hash[temp] << customer
}

customer_hash.each { |date, customers|
    print "#{date} has customers"
    customers.each { |name| print ", #{name}" }
    print "\nvisiting the store.\n"
}

这应该在与他们相关的那天之后输出所有客户。

我离家不能跑这个,我希望它按预期工作&gt; _&lt;。

由于错过了您的数据样本,

已编辑代码。