0
我想寫一個CSV「修復程序」。 不幸的是,似乎csv.foreach指令沒有調用我創建的lambda。 CPU使用率爲100%。只是想知道紅寶石在做什麼...csv.foreach卡住了,沒有調用塊
任何想法,爲什麼我的代碼是錯誤的?
1 require "csv"
2
3 ARGV.empty? do
4 print "usage: fixcsv.rb <filename>"
5 exit
6 end
7
8 filename_orig = Dir.pwd + "/" + ARGV[0]
9 filename_dest = filename_orig.sub(/csv$/,"tmp.csv")
10 topic = filename_orig.sub(/_entries.csv$/,"").sub(/.*\//,"")
11
12 puts "topic:" + topic
13
14 writer = CSV.open(filename_dest,"w",:col_sep=>";")
15 #i=0
16 cycler = lambda do |row|
17 #i = i + 1
18 #puts "row number:" + i.to_str
19 #row[17] = topic
20 puts "foo"
21 writer << row
22 end
23
24 begin
25 CSV.foreach(filename_orig,:col_sep=>",",&cycler)
26 rescue
27 puts "exception:" + $!.message
28 exit
29 else
30 writer.close
31 end
這裏是產生的堆棧跟蹤,當我按Ctrl-C它:
刺@ Ubuntu的:〜/炒鍋$紅寶石addtopic.rb civilpoliticalrights_entries.csv
topic:civilpoliticalrights
^C/usr/lib/ruby/1.8/csv.rb:914:in `buf_size': Interrupt
from /usr/lib/ruby/1.8/csv.rb:825:in `[]'
from /usr/lib/ruby/1.8/csv.rb:354:in `parse_body'
from /usr/lib/ruby/1.8/csv.rb:227:in `parse_row'
from /usr/lib/ruby/1.8/csv.rb:637:in `get_row'
from /usr/lib/ruby/1.8/csv.rb:556:in `each'
from /usr/lib/ruby/1.8/csv.rb:531:in `parse'
from /usr/lib/ruby/1.8/csv.rb:311:in `open_reader'
from /usr/lib/ruby/1.8/csv.rb:94:in `foreach'
from addtopic.rb:25
編輯:紅寶石版是:
$ ruby --version
ruby 1.8.7 (2010-01-10 patchlevel 249) [i486-linux]
爲了給出一個好的答案,我們將需要知道您使用的是哪個版本的Ruby,因爲您使用的API元素在1.8.7中的csv和1.9.x中的csv之間截然不同。這是一個不幸的情況。 (我認爲1.9可能會採用舊API,但如果您使用的是1.8.7,我寧願只專注於此。) – DigitalRoss 2011-05-07 16:00:23