我需要爲解析項目解析gedcom 5.5文件。 我發現的第一個ruby解析器是一個堆棧級別太深的錯誤,所以我試圖找到替代方案。我發起這個項目:https://github.com/jslade/gedcom-rubyruby gedcom解析器EOF異常
有一些樣品,但我也沒有讓他們工作。
這裏是解析器本身:https://github.com/jslade/gedcom-ruby/blob/master/lib/gedcom.rb
如果我試圖像這樣的例子:
ruby ./samples/count.rb ./samples/royal.ged
我得到以下錯誤:
D:/rails_projects/gedom_test/lib/gedcom.rb:185:in `readchar': end of file reached (EOFError)
我寫了一個 「變」 中每種方法更好地展示,這是異常情況下的輸出:
Parsing './samples/royal.ged'...
INIT
BEFORE
CHECK_PROC_OR_BLOCK
BEFORE
CHECK_PROC_OR_BLOCK
PARSE
PARSE_FILE
PARSE_IO
DETECT_RS
引起問題的確切行
while ch = io.readchar
在detect_rs方法
:
# valid gedcom may use either of \r or \r\n as the record separator.
# just in case, also detects simple \n as the separator as well
# detects the rs for this string by scanning ahead to the first occurence
# of either \r or \n, and checking the character after it
def detect_rs io
puts "DETECT_RS"
rs = "\x0d"
mark = io.pos
begin
while ch = io.readchar
case ch
when 0x0d
ch2 = io.readchar
if ch2 == 0x0a
rs = "\x0d\x0a"
end
break
when 0x0a
rs = "\x0a"
break
end
end
ensure
io.pos = mark
end
rs
end
我希望有人能幫助我與此有關。
謝謝你,能解決異常問題,但它不」現在也真的有效。 它說該文件不包含任何人,這不可能是正確的: 'samples/royal.ged'中有0個人和0個家庭。 – Mudvayne
對不起,我不知道gedcom文件 - 我只是想讓你通過EOF錯誤。然而我只是想看到,我在答案中從分支下載了gedcom,並且當我運行'ruby samples/count.rb samples/royal.ged'時,它給了我''樣本/ royal.ged中有3010個人和1422個家庭' .'。 –
是啊..我在Windows機器上使用ruby和rails,我在虛擬linux機器上嘗試了相同的確切示例並獲得正確的輸出。 – Mudvayne