2015-04-09 6 views
-1

Итак, я новичок в Ruby, и я пытаюсь написать многострочный блок, который проходит через файл и выполняет оператор if, чтобы получить последний номер строки каждой строки в файлеRuby 1.8.7 многострочные блоки

i = 0 

IO.foreach("testfile.log") {|line| 
    if line.include? str1 
    x = i 
    elsif line.include? str2 and line.include? str3 
    y = i 
    end 

    i++ 
} 

Когда я пытаюсь выполнить сценарий, я получаю следующее сообщение об ошибке в конце блока:

ошибки синтаксической ошибки, неожиданные «}»

Что я здесь делаю неправильно?

+1

Я знаю, что это не по теме, но [1.8.7] (https://www.ruby-lang.org/en/ news/2014/07/01/eol-for-1-8-7-and-1-9-2 /) - это конец жизни. Рассмотрите возможность обновления до Ruby 2. – squiguy

+0

@squiguy Это уже не так давно, и на самом деле это опасно использовать, поскольку оно не получает никаких патчей. – tadman

+0

@squiguy yea его на старом О.С. что поддерживает только 1,8.7 и будет хлопот для обновления, иначе я бы – Gus

ответ

5

i++ не действительна Ruby. Вместо этого попробуйте i += 1.

+0

это было! Благодаря! – Gus

2

Это плохая форма, если вам нужен блок многострочного

i = 0 
IO.foreach("testfile.log") do |line| 
    if line.include? str1 
    x = i 
    elsif line.include? str2 and line.include? str3 
    y = i 
    end 
    i+=1 # courtesy of Michael Kohl 
end 
+0

есть ли причина для этого или это просто соглашение/эстетическое – Gus

+1

Также почему не 'readlines (" testfile.log "). Each_with_index do | line, i | 'тогда нет необходимости в' i' на всех вне блока. – engineersmnky

+0

эстетический? Не уверен, что нужно пройти блок в фигурных скобках, чтобы избежать этого, закончите для одного лайнера или наоборот ???. Никакой причины вообще не использовать each_with_index, не был вопрос, на который я отвечал. –

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