我有csv文件,其中包含我想在我的Rails应用中使用的数据。行看起来像这样:
#⇓⇓ ⇓⇓ ⇓⇓ ⇓⇓ ⇓⇓ ⇓⇓
1ttAAAttAnaattFrench PolynesiattPFttAustralia and Oceaniatt-17.352606tt-145.509956
2ttAAEttAnnabattAlgeriattDZttAfricatt36.822225tt7.809167
3ttAAFttApalachicolattUnited StatesttUSttNorth Americatt29.7276066tt-85.0274416
是否有可以获取此类csv的gem或Ruby库? (注意tt
分离。)
答案 0 :(得分:4)
普通老好的Ruby stdlib CSV
会这样做。在options中,应指定:
CSV.foreach("path/to/file.csv", col_sep: "tt") do |row|
# use row here...
end
另一种选择是逐行读取文件并执行:
line.split(/tt/) #⇒ array
答案 1 :(得分:1)
查看SmarterCSV - 它为每个CSV行创建Ruby哈希,您可以重命名列。这样,您可以直接使用哈希来创建或更新Rails模型。例如:
filename = 'yourfile'
options = {
:col_sep => 'tt', :chunk_size => 10,
:user_provided_headers => %w[attr1 attr2 attr3 attr4 attr5 attr6 attr7] # use the attribute names for your model
}
SmarterCSV.process(filename, options).each do |array|
array.each do |hash|
YourModel.update_attributes(hash)
end
end
请查看https://github.com/tilo/smarter_csv以了解所有可用选项。