Flow终止而不循环并打印额外的字符

时间:2008-11-09 14:58:12

标签: ruby

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)

1 个答案:

答案 0 :(得分:2)

您需要使用

search.split("\n")

而不是

search.split('\n')

单引号可防止将其解释为实际换行符。这就是循环终止的原因 - 数组的长度,根本没有被分割,是1.在第一次迭代结束时,a(即0)变为+ = 1,这是一个长度。非分裂阵列。