【问题标题】:create hash from csv file gives error从 csv 文件创建散列给出错误
【发布时间】:2014-03-12 12:00:18
【问题描述】:

我想从一个包含大量数据的 CSV 文件创建一个哈希 我的 ruby​​ 文件代码看起来像

hersteller = Hash[CSV.read("db/red.csv", col_sep: ',', row_sep: :auto, headers: true).map {|row| [row["lieferant_nr"], row["beschreibung"]]}] #this is line number 45

 CSV.foreach("db/red.csv", col_sep: ',', row_sep: :auto, headers: true) do |row|  # map keys

  hash = Hash[row.map {|k, v| mapping[k] ? [mapping[k], v && v.strip.gsub("\u00A0", "")] : nil}.compact]  # ignore NULL values

  hash.reject! {|k, v| v == "NULL"}  # get hersteller names

  hash["hersteller"] = hersteller[hash["hersteller_nummer"]].strip.gsub("\u00A0", "") if hash["hersteller_nummer"].present? #this is line number 54

当我创建哈希时,这给了我一个错误

未定义的方法strip' for nil:NilClass /home/anish/helios/dynalink/db/seeds.rb:54:inblock in top (required)>' /home/anish/helios/dynalink/db/seeds.rb:46:in top (required)>'

谁能告诉我这里出了什么问题...... 提前致谢

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 csv


    【解决方案1】:

    改变:

    hash["hersteller"] = hersteller[hash["hersteller_nummer"]].strip.gsub("\u00A0", "") if hash["hersteller_nummer"].present? #this is line number 54
    

    到:

    hash["hersteller"] = hersteller[hash["hersteller_nummer"]].strip.gsub("\u00A0", "") if hersteller[hash["hersteller_nummer"]].present?
    

    您应该检查是否存在 hersteller[hash["hersteller_nummer"]] 而不是 hash["hersteller_nummer"]

    【讨论】:

      猜你喜欢
      • 2017-09-15
      • 2020-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多