Я пытаюсь реализовать функцию поиска, которая ищет вхождение для определенного keyword
, но если указаны параметры --max
, он будет печатать только определенное количество строк.Как остановить внешний блок из внутреннего блока
def search_in_file(path_to_file, keyword)
seen = false
File::open(path_to_file) do |f|
f.each_with_index do |line, i|
if line.include? keyword
# print path to file before only if there occurence of keyword in a file
unless seen
puts path_to_file.to_s.blue
seen = true
end
# print colored line
puts "#{i+1}:".bold.gray + "#{line}".sub(keyword, keyword.bg_red)
break if i == @opt[:max] # PROBLEM WITH THIS!!!
end
end
end
puts "" if seen
end
Я пытаюсь использовать break
заявление, но когда оно находится в пределах блока if ... end
я не могу выйти из внешнего each_with_index
блока.
Если я переведу break
за пределами if ... end
, это работает, но это не то, что я хочу.
Как я могу справиться с этим?
Заранее спасибо.
Почему вы не хотите, чтобы переместить, что 'сломаться, если я == @opt [макс]' линейный выход, если 'if' блок? Кстати, у вашей текущей реализации есть проблема, что она не останавливается, если строка с номером '@opt [: max]' не включает ключевое слово. Вы все равно должны это изменить. – spickermann
Дело в том, чтобы проверить только линии, где обнаружено место, и остановиться, когда достигнут максимум. Если я сделаю это по-своему, он будет считать всю строку, например 10, и останавливается. То, что я хочу, - это подсчет строк только с появлением. – SuperManEver
@spickermann Ваш комментарий косвенно указал мне на то, где настоящая проблема. На самом деле, я делаю сравнение с неправильной переменной – SuperManEver