【问题标题】:How to avoid undefined method error for Nilclass如何避免 Nilclass 的未定义方法错误
【发布时间】:2013-09-19 19:22:11
【问题描述】:

我使用 dbf gem 从 df 文件中读取数据。我写了一些代码:

    # encoding: UTF-8
    require 'dbf'
    widgets = DBF::Table.new("patient.dbf")
      widgets.each do |record|
       puts record.vorname
      end

基本上代码可以工作,但是在 ruby​​ 将大约 400 record.vorname 写入控制台后,我收到此错误:

  ...
  Gisela
  G?nter
  mycode.rb:5:in `block in <main>': undefined method `vorname' for nil:NilClass (NoM
  ethodError)
    from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/dbf-2.0.6/lib/
    dbf/table.rb:101:in `block in each'
    ......

我的问题是如何避免这个错误?因此,为什么(您如何在错误中看到)带有 ä,ö,ü 的 record.vorname 显示为 ?,?,?例如:

Günter 转换为G?nter

谢谢

【问题讨论】:

  • 这意味着您的nil 数组中有nil 元素。也许有一些关于 DBF 的东西。
  • 现在我写 puts record.vorname 除非 record.vorname == nil 但得到同样的错误!
  • record 为零,而不是其vorname
  • 谢谢,现在可以了!您可以将其发布为答案吗?你知道为什么 ö,ü,ä 显示为 吗?

标签: ruby


【解决方案1】:

由于某种原因,您的 DBF 驱动程序返回 nil 记录。您可以通过跳过这些来假装这个问题不存在。

widgets.each do |record|
  puts record.vorname if record
end

【讨论】:

    【解决方案2】:

    关于错误字符的问题,根据 dfb 文档:

    编码(代码页)

    dBase 支持以不同格式对非英文字符进行编码。 不幸的是,所使用的格式并不总是设置,所以你可能不得不 手动指定它。例如,您有一个来自俄罗斯的 DBF 文件,并且 你得到的数据不好。尝试使用“俄罗斯 OEM”编码:

    table = DBF::Table.new('dbf/books.dbf', nil, 'cp866')

    有关受支持的完整列表,请参阅 doc/supported_encodings.csv 编码。

    所以请确保您使用正确的编码从数据库中读取数据。

    【讨论】:

      【解决方案3】:

      为了避免 nil:Nil 类的 NoMethodError,你可以试试这个:

      require 'dbf'
      widgets = DBF::Table.new("patient.dbf")
        widgets.each do |record|
         puts record.vorname unless record.blank?
        end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-25
        • 2014-06-01
        相关资源
        最近更新 更多