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

Ruby 如何避免类的未定义方法错误,ruby,Ruby,我使用dbfgem从df文件中读取数据。我写了一些代码: # encoding: UTF-8 require 'dbf' widgets = DBF::Table.new("patient.dbf") widgets.each do |record| puts record.vorname end 代码基本上可以工作,但ruby将大约400record.vorname写入控制台后,我得到以下错误: ... Gisela

我使用dbfgem从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'
    ......
。。。
吉塞拉
甘特
mycode.rb:5:in'block-in':nil:NilClass(NoM)的未定义方法'vorname'
ethodError)
来自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'
......
我的问题是如何避免这个错误?因此,
记录.vorname
与ä,ö,ü一起显示为?,?,这是很有趣的?,?,?例如:

Günter
被转换为
G?nter


谢谢

为了避免nil:nil类的命名错误,您可能可以尝试以下方法:

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

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

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

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

编码(代码页)

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

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

请参阅,以获取受支持的应用程序的完整列表 编码


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

这意味着
widgets
数组中存在
nil
元素。也许DBF有点问题。现在我编写了puts record.vorname,除非record.vorname==nil,但得到了相同的错误
record
为零,不是它的
vorname
谢谢,现在它可以工作了!你能把它作为答案贴出来吗?你知道为什么ö,ü,ä显示为?