私はあなたがここに宝石を必要としないと思いますか? CSVをSqliteデータベースなどにインポートします。メモリのみのテーブルに入れることができるようにするには、多くのクエリを実行する場合にはスピードアップが必要です。
require "csv"
require "sqlite3"
require "active_record"
# With activerecord
# Create our database table in to memory
ActiveRecord::Base.establish_connection(:adapter => "sqlite3",:database => ":memory:")
unless ActiveRecord::Base.connection.table_exists?('searchengines')
ActiveRecord::Schema.define do
create_table :searchengines do |filename_table|
filename_table.column :name, :string
filename_table.column :url, :string
end
end
end
class Searchengine < ActiveRecord::Base
end
CSV.parse(DATA, headers: true) do |row|
Searchengine.create({name: row[:name], url: row[:url]})
end
# or with plain sql
db = SQLite3::Database.new ":memory:"
rows = db.execute("create table searchengines (name varchar(30), url varchar(30))")
CSV.parse(DATA, headers: true) do |row|
db.execute "insert into users values (?, ?)", row.fields
end
# then in activerecord
class Searchengine < ActiveRecord::Base
end
p Searchengine.where(name: "Google UK")
__END__
Name, URL
Google UK, http://google.co.uk
Yahoo UK, http://yahoo.co.uk
ありがとうアンドレイ。私は複数のデータクエリのためにこのcsvを処理する必要があるので、私はあなたが上で提案したものを書くことなく、箱からソリューションを探しています。 – Rahul
@Rahulあなたは「箱から出してどういう意味ですか?」2行のコードはあなたのために十分な状態ではありませんか? :) –
アンドレイ、私が意味するのは、私が指定した構文を使用できるようにする宝石/ヘルパーです。 2行のコードですが、データを何度もフィルタリングし、さまざまなフィルタ条件を使用する必要があります。 – Rahul