【问题标题】:undefined method 'split' for nil:NilClass (NoMethodError)nil:NilClass (NoMethodError) 的未定义方法“拆分”
【发布时间】:2013-10-10 20:26:15
【问题描述】:

我正在尝试将CSV 文件中的一行拆分为一个数组。我可以将CSV文件中的所有内容打印到控制台没问题,像这样:

CSV.foreach('so1.csv', :headers => true, :col_sep => "\t", :skip_blanks => true) do |row|
  id, name = row[0], row[1]
  puts id, name
end

但是,当我尝试将namerow[1] 拆分为names 数组时,我收到undefined method 'split' for nil:NilClass (NoMethodError) 消息:

CSV.foreach('so1.csv', :headers => true, :col_sep => "\t", :skip_blanks => true) do |row|
  id, name = row[0], row[1]
  unless (id =~ /#/)
    names = name.split
  end

我也试过name.split("\n")name.split("\t") 无济于事。

为清楚起见,CSV 文件的屏幕截图:

CSV Screenshot

有人能解释一下这里出了什么问题吗?太好了-谢谢。

【问题讨论】:

  • 您的puts id, name 并不能肯定地告诉您整行都没有进入row[0]。所以这可能就是正在发生的事情,namenil。整行在id 中。你需要:col_sep => ','
  • 请不要向我们提供重现问题所需数据的屏幕截图。相反,将示例数据复制然后粘贴到您的问题中,我们可以在其中复制它。想象一下,当图片的链接断开并且不再可见时,要理解您的问题将是多么困难。
  • @theTinMan 公平点,以后会做......谢谢

标签: ruby csv split


【解决方案1】:

它告诉你namenil,可能是因为row[1] 不存在。我的猜测是列没有正确拆分。现在你是说列是由标签分隔的,但这不是屏幕截图显示的内容。

您确定不想要:col_sep => "," 吗?

【讨论】:

  • 嗯,也许我知道,我把它改成了",",就像你说的那样。当输出到控制台时,它会在单独的行上打印出IDname,而不是像以前那样在一行上。就split 错误而言,它不再是.. 现在我有一个新错误,但它在下一行的一个方法上,所以我认为这是进步..谢谢
猜你喜欢
  • 2013-11-14
  • 2013-01-14
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多