Есть ли хороший способ читать, редактировать и записывать файлы на месте в Ruby?
В моем онлайн-поиске я нашел вещи, предлагающие прочитать все это в массиве, изменить указанный массив , затем все выпишите. Мне кажется, должно быть лучшее решение, особенно если я имею дело с очень большим файлом.
Примерно так:
myfile = File.open("path/to/file.txt", "r+")
myfile.each do |line|
myfile.replace_puts('blah') if line =~ /myregex/
end
myfile.close
Где replace_puts
будет писать поверх текущей строки, вместо (перезаписи) следующей строки, как это происходит сейчас, потому что указатель находится в конце строки (после разделителя).
Таким образом, каждая строка, соответствующая / myregex /
, будет заменена с «бла». Очевидно, то, что я имею в виду, немного сложнее, чем это, что касается обработки, и будет выполняться в одну строку, но идея та же самая - я хочу читать файл построчно и редактировать определенные строки, и напиши, когда я закончу.
Может быть, есть способ просто сказать «перемотать назад сразу после последнего разделителя»? Или какой-нибудь способ использовать each_with_index
и писать через номер индекса строки? Однако я не смог найти ничего подобного.
Лучшее решение, которое у меня есть до сих пор, - это читать вещи построчно, записывать их в новый (временный) файл построчно (возможно, с редактированием), затем перезапишите старый файл новым временным файлом и удалите. Опять же, я чувствую, что должен быть способ получше - я не думаю, что мне нужно создавать новый файл размером 1 ГБ только для редактирования некоторых строк в существующем файле размером 1 ГБ.