2012-10-08 179 views
0

我在理解如何從CSV文件中獲取數據以在其他地方使用時遇到了一些問題。從CSV解析數組到字符串?

我的代碼目前只有:

CSV.foreach("../../lib/modules/csv.csv") do |row| 
    # use row here... 

    def initialize(headers, fields, header_row = false) 
    end 
end 

這就是所有我能真正從紅寶石的文檔回暖。似乎沒有任何關於如何選擇標題然後在該標題下取一個單元的例子?

下面是一個示例表的快速模擬了,如果我不解釋這不夠好:

title | description | priority 
---------------------------------- 
story1 | example1 |  6 
----------------------------------  
story2 | example2 |  7 
---------------------------------- 
story3 | example3 |  8 
---------------------------------- 

我怎樣才能獲得的數據進行存儲字符串?:

example = column[i] 

回答

1

當從行得到的值,您可以通過獲得價值指數(如Ashish所示)。你也可以根據標題描述得到它,這聽起來像你想要的。

下面的例子演示瞭如何您可以在「說明」列創建的所有值的數組:

all_descriptions = Array.new 
CSV.foreach("test.csv", :headers=>true, :header_converters=>:symbol) do |row| 
    all_descriptions << row[:description] 
end 
all_descriptions 
#=> ['example1', 'example2', 'example3'] 

正如你所看到的,你可以得到說明值使用row[:description]每一行,其中:description是列標題變成符號。

請注意,如果你要存儲在循環以後使用的值,它會看起來像:

CSV.foreach("test.csv", :headers=>true, :header_converters=>:symbol) do |row| 
    example = row[:description] 
    #do stuff 
    if example =~ /something/ 
     #do other stuff 
    end 
end 
+1

你做了'require'csv'嗎? csv類不會自動包含(即您必須手動執行)。 –

1

您可以使用行變量的索引訪問單個單元格。

CSV.foreach("../../lib/modules/csv.csv", headers: true) {|row| puts "#{row[0]} - #{row[1]} #{row[2]}" } 

如果設置headers:true那麼每個rowCSV::Row一個實例和您的CSV的第一行被視爲標題行。它會輸出

story1 - example1 - 6 
story2 - example2 - 7 
story3 - example3 - 8 

但是,如果你設置headers:false每個rowArray一個實例,它會打印 -

title - description - priority 
story1 - example1 - 6 
story2 - example2 - 7 
story3 - example3 - 8 
+0

感謝您的幫助,你能澄清多一點對我來說後續:如果我想用範例2作爲一個字符串,我該怎麼做?例如string2 = x – samayres1992