在Rails中获取CSV文件

时间:2016-04-05 05:22:19

标签: ruby-on-rails ruby csv

我有csv文件,其中包含我想在我的Rails应用中使用的数据。行看起来像这样:

#⇓⇓   ⇓⇓    ⇓⇓                ⇓⇓  ⇓⇓                     ⇓⇓    
1ttAAAttAnaattFrench PolynesiattPFttAustralia and Oceaniatt-17.352606tt-145.509956
2ttAAEttAnnabattAlgeriattDZttAfricatt36.822225tt7.809167
3ttAAFttApalachicolattUnited StatesttUSttNorth Americatt29.7276066tt-85.0274416

是否有可以获取此类csv的gem或Ruby库? (注意tt分离。)

2 个答案:

答案 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以了解所有可用选项。