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 to share