是否存在使用CSV作为数据库的框架或gem或类似内容?就像我想在CSV上快速运行一些Ruby命令一样,我可以使用它将它加载到控制台并直接在它上面工作然后在没有实际数据库的情况下重新导出为CSV吗?
我知道它很慢等等,但它并不意味着运行应用程序或任何东西,只是在数据集上运行转换等。
我猜它可以作为一个巨大的哈希加载到内存中然后像这样管理?沿着那条路线的东西?还是有更好的东西?
答案 0 :(得分:1)
像
这样的东西require 'csv'
c = CSV.open(ARGV[0], col_sep: ';', headers: true)
c.each do |row|
row.fields.each_with_index do |value, i|
values[c.headers[i]] ||= []
values[c.headers[i]] << value
end
end
您可能还希望将它们转换为结构,以便您可以更轻松地处理它。
require 'ostruct'
[...]
values.each do |k,v|
v.each_with_index do |val, i|
items[i] ||= OpenStruct.new
items[i].send("#{k}=", val)
end
end
保存,您可以执行类似
的操作CSV.open('file.csv', 'w', :quote_char => '"', :force_quotes => true, :encoding => "UTF-8") do |csv|
csv << ['header1','header2']
csv << ['row1 el1', 'row2 el2']
end
希望这会有所帮助
答案 1 :(得分:1)
除了添加一些自制软件的CSV框架外,不需要其他框架。 这样的东西,从命令行使用,你只需要传递参数。
class Csv_db < CSV
attr_accessor :rows
def initialize file
@rows = CSV.read file
end
def list
@rows.each do |row|
p row
end
end
def add row
@rows << row
end
def get rowindex
@rows[rowindex]
end
def save
...
end
end
csv = Csv_db.new('original.csv')
csv.list
csv.add ['field1','field2']
csv.list
p csv.get 2