2016-02-01 66 views
0

我是Ruby的新品,並使用它來嘗試讀取/寫入csv。到目前爲止,我有一個腳本,執行以下操作:從CSV文件Ruby:如果條件符合,寫入CSV

  1. 進口數據,存儲選擇列作爲一個單獨的數組(我不需要從每列數據)
  2. 執行上的計算數據存儲在新創建的陣列
  3. 結果轉置的陣列表行,將被輸出到CSV

    table = [Result1, Result2, Result3].transpose 
    

目前,我能輸出使用下面的表格:

 CSV.open(resultsFile, "wb", 
    :write_headers=> true, 
    :headers => ["Result1", "Result2", "Result3"] 
    ) do |csv| 
     table.each do |row| 
     csv << row 
     end 

我的問題是,我如何添加一個條件到的結果之一於某文本字符串只輸出行。例如,如果result2中的值等於「Apple」,我希望將該行中的數據寫入csv文件。如果不是,則跳過該行。

我試過把if/else放在幾個不同的區域,並沒有取得任何成功。

感謝所有幫助

+0

單獨存儲列的好處是什麼? – Tilo

+0

@Tilo csv有大約40欄,我只對其中的3篇感興趣(我編輯了我的帖子以使這篇文章更加清晰)。我願意接受任何建議 - 這是我第一次嘗試Ruby,所以不確定我是否正確地做了這個部分。 – SteveNikks

+0

如果您使用'smarter_csv' gem,則可以使用'key_mapping'選項僅保留您感興趣的列,然後在需要時將數據寫入新的CSV文件 – Tilo

回答

0

你可以做類似如下:

header = ["Result1", "Result2", "Result3"] 
CSV.open(resultsFile, "wb", :write_headers=> true, :headers => header) do |csv| 
    table.each do |row| 
     csv << row if header.zip(row).to_h["Result2"] == "Apple" 
    end 
end 

zip合併兩個數組併產生數組的數組,其中每個子陣列具有從相同的輸入數組元素索引和to_h可以將任何2元素數組的數組轉換爲散列。例如:

row = ["Orange", "Apple", "Guava"] 
header = ["Result1", "Result2", "Result3"] 

header.zip(row).to_h 
=> {"Result1"=>"Orange", "Result2"=>"Apple", "Result3"=>"Guava"}