2016-11-22 3 views
0

I持っているように、配列の各行が見え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

これは、最も単純な解決策として、ハッシュの配列に格納するのに適しています。

+0

ご返信ありがとうございます。私はこれが私が探しているものだと思います。 – pjw23

+0

確かです。記録のために、@ tadmanによる答えは同じ結果を生み出します。違いは、フィールドの順序をハードコードするのではなく、私の答えと同じように、列名を定数に入れて、フィールドの追加、並べ替え、または削除をもう少し簡単にできるようにすることです。 – moveson

関連する問題