2016-03-02 84 views
-1

我試圖從網頁中刮取表格並將其存儲到csv文件中(我必須這樣做,所以讓我們跳過其他建議,例如excel,非數組解決方案,等等)Ruby數組到csv文件

網頁上的每一行表格都是tr選項卡。如果我是導出到Excel,我會循環的做這個行:

.css("tr")[1..-1].each do |line| 

這將使在Excel中正確的格式,但是當我使用數組,TO- CSV方法,每一行從表成爲csv中的一列。因此,如果表格中有10行和20列,它將在csv中顯示爲10列x1行(每行的所有20列值存儲在一個單元中)。

我想這是因爲數組將每行視爲索引並將行存儲到csv文件的每一列中。

有沒有辦法在csv中獲得正確的格式?

當前代碼:

category_array = [] 
page.css("#ctl00_PageData_GridView1").css("td")[0..30].each do |line| 
category_name = line.text 
category_array.push(category_name) 
end 
CSV.open('category.csv','w') do |csv| 
csv << category_array 
end 
+0

'do ... end'裏面的代碼是什麼? – Aetherus

+0

'category_array = []' 'page.css( 「#ctl00_PageData_GridView1」)的CSS( 「TD」)[0..30]。每個做|。線|'' CATEGORY_NAME = line.text category_array.push (category_name) end' 'CSV.open('category.csv','w')do | csv | csv << category_array end' – dozel

+1

請更新您的問題以包含此代碼段。 – Aetherus

回答

0

敢肯定你正在做的事情錯了喜歡使用<<+數組:

irb(main):035:0> row = [1] 
irb(main):035:0> result = [] 

irb(main):035:0> result + row 
=> [1] # It adds the content of the second array to the first 

irb(main):037:0> result.concat(row) 
=> [1] # Same as above 

irb(main):036:0> result << row 
=> [[1]] # It moves the whole array into the other array 

因此,也許你想使用concat+代替<<