如何避免Nilclass的未定义方法错误

时间:2013-09-19 10:33:01

标签: ruby

我使用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'
    ......

我的问题是如何避免此错误?因此,为什么(如何在错误中看到){1,ö,ü显示为{,1}}会显示为?,?,?例如:

record.vorname已转换为Günter

由于

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

  

编码(代码页)

     

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

     

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

     

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

因此,请确保使用正确的编码从数据库中读取。

答案 2 :(得分:0)

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

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