我使用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
由于
答案 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