Когда вы вызываете map!
для lines[3..lines.length-4]
, этот метод вызывается не для исходного массива, а для нового, который содержит фрагмент исходного массива lines
. Если вам нужно заменить часть вашего массива lines
его разделенными и отфильтрованными элементами, вы можете сделать это следующим образом:
lines[3..lines.length-4] = lines[3..lines.length-4].map(&:strip).reject { |tn| tn == "" }
Здесь вы явно переопределяете фрагмент массива lines
после чередования и фильтрации содержащихся в нем элементов.