2011-12-29 4 views
2

タイトルのように。私のデータベースにテーブルを作成し、それから私のcsv(タブは ";"レコード(およびテーブル全体)は誰にも更新または変更されません。これらのレコードでdb(Postgresのみ)を作成する必要があります。私は後でこのテーブルからいくつかのレコードを無作為に取ってもらいたい。任意のヒント?または、dbからのcsvファイルinstadからランダムなレコードを直接取得する方が良い解決策ですか? Plzヘルプ作成する高速なソリューションは、CSVファイルからのデータを使用してdbテーブルを作成して塗りつぶす

答えて

2

cvsファイルを読み込み、ActiveModelを使用してデータベースと通信するコマンドラインツールを作成できます。この場合、他のレールアプリケーションと同様に、モデルとデータベースを作成します。あなたのCVSを読むために

は、あなたがこれを行うculdファイル:

require 'csv' 

CSV.foreach(fileName, :headers => true, encoding: "UTF-8") do |row| 
    row['myfiled'].to_s 
end 

あなたは、CSV宝石を必要とし、あなたが使用したい列の名前とmyFieldでを交換する必要があります。もしあなたがルビーの中にデータを持っていれば、あたかもレールのようにモデルを作成します。定義を同じファイルに入れるか、requireを使用してモデルを参照してください。

また、cvsファイルを読み込んで、データを使用するかどうかをランダムに決定することもできます。この場合、データベースに入れる必要はありません。

+0

ありがとう!しかし、どの方法がより速いのかを提案できますか?私のcsvファイルには約100 000行(レコード)があるので、dbでの作業は毎回大きなファイルを開くよりも速くなると思っています。 – mrmnmly

+1

ランダムな線を何回取得するかによって異なります。あなたが一度だけそれをしたいならば、cvsだけの解決はより速いです(あなたはデータを永続させるオーバーヘッドを必要としません)。 しかし、それを複数回実行するには、データベースに入れます。この場合、cvsを一度だけ解析すると、すべての読み込みがデータベースに送られます。 –

+0

私のcsvファイルがassets/images/file.csvにある場合のファイルパスの追加方法は? – mrmnmly