The stream ends without a loop and prints an extra character

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
$

      

How do I get this to work? I have to choose the most appropriate term for each food item.

I also get a strange error when setting a to any other number:

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

      

+1


source to share


1 answer


You need to use

search.split("\n")

      

instead



search.split('\n')

      

Single quotes prevent it from being interpreted as an actual newline. This is why the loop ends - the length of the array, not the division, is 1. At the end of your first iteration, a (which is 0) becomes + = 1, which is the length of unsplit array.

+2


source







All Articles