2008-11-09 2 views
1

searchterms.rbFlow завершается без зацикливания и печатает дополнительный символ

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. В конце вашей первой итерации a (которая равна 0) становится равной + = 1, которая является длиной unsplit array.

+0

Я так рад, когда это так просто. Это решает обе проблемы, мой друг :-) – Jesse 2008-11-09 15:44:46

Смежные вопросы