2013-06-19 48 views
1

我有一個CSV文件看起來像這樣:如何從CSV中製作數組數組?

Jenny, [email protected] , 
Ricky, [email protected] , 
Josefina [email protected] , 

我試圖讓這個輸出:

users_array = [ 
['Jenny', '[email protected]'], ['Ricky', '[email protected]'], ['Josefina', '[email protected]'] 
] 

我已經試過這樣:

users_array = Array.new 

file = File.new('csv_file.csv', 'r') 
file.each_line("\n") do |row| 
    puts row + "\n" 
    columns = row.split(",") 
    users_array.push columns 
    puts users_array 
end 

不幸的是,在終端中,返回:

Jenny 
[email protected] 
Ricky 
[email protected] 
Josefina 
[email protected] 

我不認爲將這項工作:

users_array.each_with_index do |user| 
    add_page.form_with(:id => 'new_user') do |f| 
     f.field_with(:id => "user_email").value = user[0] 
     f.field_with(:id => "user_name").value = user[1] 
    end.click_button 
end 

我需要做什麼改變嗎?還是有更好的方法來解決這個問題?

回答

0

假設您的CSV文件實際上已經在第三行的姓名和電子郵件地址之間用逗號:

require 'csv' 

users_array = [] 
CSV.foreach('csv_file.csv') do |row| 
    users_array.push row.delete_if(&:nil?).map(&:strip) 
end 

users_array 
# => [["Jenny", "[email protected]"], 
#  ["Ricky", "[email protected]"], 
#  ["Josefina", "[email protected]"]] 

有可能是一個更簡單的方法,但我在做什麼有丟棄nil場由尾隨逗號創建並strip ping電子郵件地址周圍的空間。

1

Ruby的標準庫有一個CSV類,它有一個類似於File的API,但包含許多用於處理表格數據的有用方法。爲了得到你想要的輸出,所有你需要做的是這樣的:

require 'csv' 
users_array = CSV.read('csv_file.csv') 

PS - 我覺得你得到你所期望你的文件解析以及輸出,但也許你被它如何揭去正在打印到終端。 puts與數組行爲不同,將每個成員對象打印在新行上而不是單個數組。如果你想查看它作爲一個數組,使用puts my_array.inspect

+0

不幸的是,這個失敗的原因有兩個:1)每個數組末尾有一個尾隨的'nil',以及2)電子郵件地址周圍有空格。 –

+0

我喜歡這個。檢查提示。謝謝。 –