2008-11-09 5 views
1

흐름은 반복없이 종료하고

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 여분의 문자 인쇄? 각 식품에 가장 적합한 용어를 선택해야합니다.

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

답변

2

을 당신은

search.split("\n") 

대신

search.split('\n') 

단일 따옴표를 사용해야합니다

또한 시작하는 다른 번호로 설정에 대한 이상한 오류 그것을 실제 개행 문자로 해석하지 못하게합니다. 이것이 루프가 종료되는 이유입니다. 분할되지 않은 배열의 길이는 1입니다. 첫 번째 반복 끝에 a (= 0)는 + = 1이됩니다. 분할되지 않은 배열.

+0

정말 간단 할 때 정말 기뻐요. 그것으로 두 가지 문제가 해결됩니다. 내 친구 :-) – Jesse

관련 문제