2008-11-09 39 views
1

searchterms.rb流量沒有終止循環和打印多餘的字符

search = "1|butter+salted|Butter salt|Butter|Túrós csusza|Margarine|Potato 
      2|butter+whipped|Shea butter|Butter|Pastry bag|Cream bun|Butter cream 
      3|butter+oil+anhydrous|Ultralight backpacking|Odell\'s|Ghee|Fragrance extraction|Perfume 
      4|cheese+blue|Blue cheese|Shropshire Blue cheese|Buxton Blue cheese|Danish Blue cheese|Blue cheese dressing 
      5|cheese+brick|Brick cheese|Oaxaca cheese|List of American cheeses|Herve cheese|Trappista cheese 

. 
. 
. 

search = search.split('\n') 
catalog = String.new 
a = 0; until a == search.length 

    line = search[a].split('|') 
    id = line.first 
    term = line[1] 

    puts id + "|" + term 
    puts "  1 #{line[2].nil? ? '' : line[2]}" 
    puts "  2 #{line[3].nil? ? '' : line[3]}" 
    puts "  3 #{line[4].nil? ? '' : line[4]}" 
    puts "  4 #{line[5].nil? ? '' : line[5]}" 
    puts "  5 #{line[6].nil? ? '' : line[6]}" 

    choice = gets 
    choice = choice.chomp.to_i 

    catalog = "#{id}|#{term}|#{line[choice]}\n" 

    %x[echo "#{catalog}" >> updated_terms] 

    a += 1 
end 

$ ruby searchterms.rb 
1|butter+salted 
     1 Butter salt 
     2 Butter 
     3 Túrós csusza 
     4 Margarine 
     5 Potato 
2 # I don't know why this figure is printed. 
2 
$ 

我如何得到這個工作?我必須爲每個食物選擇最相關的術語。

我也得上設置任何其他號碼,即可開始奇怪的錯誤:

searchterms.rb:7525:  
     line = search[a].split('|') 
    private method `split' called for nil:NilClass (NoMethodError) 
+0

您也正在爲您的循環使用非標準成語 - 考慮使用`(0 ... search.length).each do | a |`或`0.upto(search.length - 1)do | a |`並刪除你的'a + = 1`行。 – rampion 2008-11-09 22:14:52

回答

2

您需要使用

search.split("\n") 

,而不是

search.split('\n') 

單引號防止它被解釋爲實際的換行符。這就是爲什麼循環終止的原因 - 數組的長度根本不被分割,爲1.在第一次迭代結束時,一個(它是0)變爲+ = 1,這是非分裂陣列。

+0

如此簡單,我很高興。這解決了這兩個問題,我的朋友:-) – Jesse 2008-11-09 15:44:46