1

I use the dbf gem to read data out of an df file. I wrote some code:

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

Basically the code works but after ruby writes about 400 record.vorname to the console i get this error:

  ...
  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'
    ......

My question is how can i avoid this error? Therefore it would be intresting why ( how you can see in the error) the record.vorname's with ä,ö,ü are displayed like ?,?,? for eg:

Günter is transformed to G?nter

Thanks

4

3 回答 3

2

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

widgets.each do |record|
  puts record.vorname if record
end
于 2013-09-19T10:56:34.717 回答
1

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

编码(代码页)

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

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

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

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

于 2013-09-19T11:22:11.697 回答
0

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

require 'dbf'
widgets = DBF::Table.new("patient.dbf")
  widgets.each do |record|
   puts record.vorname unless record.blank?
  end
于 2013-09-19T10:55:07.310 回答