2017-03-31 66 views
0

我有兩行具有的「日期」 &「CUSTOMER_NAME」頭一個CSV報告:我想通過紅寶石解析CSV創建報告

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

我想打印出的聲明以顯示當天是誰的客戶,所以它會顯示如下:週一有客戶John,David,Sam,& Kenny。 \ n 週二有瑪麗,翡翠和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." 

但我沒有得到正確的輸出,最有可能的IAM新的節目。請上我應該如何幫助達到要求?

[「Date」,「Monday」,nil,nil,nil,「Tuesday」,nil,nil,「Wednesday」,nil,nil]有客戶[「Customer_Name」,「John」,「David」, 「山姆」, 「肯尼」, 「瑪麗」, 「玉」, 「林賽」, 「湯姆」, 「林登」, 「彼得」]參觀store.C02S51D2G8WL:RubySQL

問候

+0

輸入文本是否實際上有這樣的大括號? – dawg

+0

不,我只是通過閱讀csv文件來獲取輸出。 #require'csv' #CSV.foreach('customerVisit.csv')do | row | #\t放row.inspect #結束 「日期」, 「CUSTOMER_NAME」 「星期一」, 「約翰」 「」, 「大衛」 「」, 「山姆」 「」, 「肯尼」 「星期二」,‘瑪麗’ ‘’,‘玉’ ‘’,‘林賽’ ‘星期三’,‘湯姆’ ‘’,‘林頓’ ‘’,‘彼得’ –

+0

或者有更好的解決方案我的要求,請指教。 但請記住,每一天都會有不同的顧客出現,所以它不會總是隻有3或4個顧客。 –

回答

0

原因因爲你的結果可以在這裏找到「#{array}」,它將數組'按原樣'插入到字符串中。所以你可以分成幾組。

我懷疑你使用的是錯誤的工具。紅寶石哈希更適合分類數據。 (此時至少)

例如

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" 
} 

這應該輸出它們與相關的一天後,所有的客戶。

我離家出走,無法運行此操作,我希望它按預期工作> _ <。

編輯因錯過閱讀您的數據示例代碼。

+0

謝謝!這行得通!但我有一個問題。 temp = date如果日期基本上意味着日期匹配,那麼它將繼續爲customer_name循環,直到它具有新的日期正確爲止? –

+0

是的,不是,它不完全是它做的,但它有這種效果。在你的輸出中,你會得到零值,直到新的一天到來。因此,該行將設置temp =到日期,除非日期爲零。 – CookieNinja