2016-11-22 35 views
0

我叫property_details_array數組,其中數組的每一行的樣子:如何創建和輸出數組結果

["\n  \n  \n   \n    1 W Maple Dr,\n   Atlanta,\n   GA\n   30315" 

我試圖找出乾淨的數據輸出到一個最好的辦法類似於表格的格式,可以是CSV或HTML。

這些數組中的每個數組都有超過200行,因此自動執行此操作將非常有幫助。我開始通過解析數據,如:

property_details_array.each do |i| 
    prop_info = i.split("\n") 
     street = prop_info[4].strip 
     city = prop_info[5].strip 
     state = prop_info[6].strip 
     zip = prop_info[7].strip 
end 

但是,我有點卡在下一步去哪裏。我一直在考慮將它作爲一個數組或數組散列,但我不確定是否比另一個更好,這取決於我將使用多少數據。這兩種方法似乎都有意義,但是由於我不得不首先清理數據,所以我不確定最佳的解決方法。

我如何最好地爲這些值提供未來輸出?


新信息

@tadman - 對不起,我沒有解釋,並非常感謝你的幫助。我的意思是說,在仔細觀察數據之後,我意識到結果並不是可預測的順序。有時價格會在[16],有時則不是。我試圖找出如何將結果導入哈希數組,然後回到繪圖板。

的原始數據,我與外觀類似的工作:

["\n  \n  \n   \n    2265 Tanglewood Cir NE,\n   Atlanta,\n   GA\n   30345\n \n  \n\n  \n   Dresden East\n  \n  \n\n   $289,900\n   \n   \n   \n  3 bd\n    2 ba\n    1,566 sq ft\n    
0.3 acres lot\n   \n   \n  \n   \n   Single Family Home\n   \n  \n   \n   \n 
Brokered by Re/Max Town And Country\n   \n   \n  
\n  \n   \n   Brokered by \n   Re/Max 
Town And Country\n   \n  \n  \n ", "\n  \n 
\n   \n    2141 Dunwoody Gln,\n   
Atlanta,\n   GA\n   30338\n   \n  \n\n 
\n   \n   $469,900\n   \n   \n   
\n    4 bd\n    3 ba\n    2,850 sq 
ft\n    0.3 acres lot\n    2 car\n   
\n   \n  \n   \n   Single Family Home\n 
\n  \n   \n   \n    Brokered by 
Buckhead Home Realty Llc\n   \n   \n  \n  
\n   \n   Brokered by \n   Buckhead Home 
Realty Llc\n   \n  \n  \n ", "\n  \n  
\n   \n    1048 Martin St SE,\n   
Atlanta,\n   GA\n   30315\n   \n  \n\n 
\n   Intown South\n   Peoplestown\n  \n  \n 
\n   $164,900\n   \n   \n   \n   
5 bd\n    3 ba\n    2,376 sq ft\n    
7,405 sq ft lot\n   \n   \n  \n   \n  
Single Family Home\n   \n  \n   \n   \n 
Brokered by Greenlet Llc\n   \n   \n  \n  
\n   \n   Brokered by \n   Greenlet Llc\n  
\n  \n  \n ", "\n  \n  \n   \n   
1048 Martin St SE,\n   Atlanta,\n   GA\n   
30315\n   \n  \n\n  \n   Intown South\n  
Peoplestown\n  \n  \n   \n   $164,900\n 
\n   \n   \n    5 bd\n    3 
ba\n    2,055 sq ft\n    7,584 sq ft lot\n  
\n   \n  \n   \n   Single Family Home\n 
\n  \n   \n   \n    Brokered by 
Greenlet, Llc\n   \n   \n  \n  \n   
\n   Brokered by \n   Greenlet, Llc\n   \n 
\n  \n "] 

理想情況下,我試圖分析出以下幾點:(街道,城市,省,郵編,價格,BD,BA,廣場.FT)任何想法的最佳方式來做到這一點。

回答

2

爲什麼不把字段拆分成哈希,如果他們在一個可預測的順序?

你可以這樣做:

FIELDS = [ nil, nil, nil, nil, :street, :city, :state, :zip ] 

details.map do |d| 
    Hash[ 
    FIELDS.zip(d.split("\n").map(&:strip)).select do |key, value| 
     key 
    end 
    ] 
end 
# => [{:street=>"1 W Maple Dr,", :city=>"Atlanta,", :state=>"GA", :zip=>"30315"}] 

構成各包含可映射任何字段散列的數組。這樣做的好處是,如果輸入格式發生變化,如果字段得到重新排列,輸出可以保持一致。

+0

謝謝你的回覆,使用這種方法的問題是列表不能正確逗號分隔。我沒有足夠的紅寶石知識來使它正常工作... – pjw23

+0

你是什麼意思「不正確」?我不知道該說些什麼。這處理給出的樣本數據。 – tadman

+0

對不起,沒有更好的解釋,我仍然掌握了Ruby,以及如何使用它。我在原帖中增加了額外的信息......如果您能提供任何幫助,我將非常感激。謝謝! – pjw23

0

作爲最簡單的解決方案,這看起來很適合存儲散列數組。

property_details_array 
    .map { |row| row.split("\n") } 
    .map { |prop_info| {street: prop_info[4].strip, 
         city: prop_info[5].strip, 
         state: prop_info[6].strip, 
         zip: prop_info[7].strip} } 
+0

非常感謝您的回覆。我認爲這是我正在尋找的。 – pjw23

+0

當然。爲了記錄,@tadman的答案會產生相同的結果。不同之處在於,不像我的答案那樣對字段順序進行硬編碼,而是將列名放在一個常量中,以便您可以更輕鬆地添加,重新排序或刪除字段。 – moveson