Есть ли хороший способ читать, редактировать и записывать файлы в 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/
, будет заменена на "blah". Очевидно, что я имею в виду немного более активное участие, чем в отношении обработки, и будет выполняться в одной строке, но идея одна и та же: я хочу читать файл за строкой и редактировать определенные строки и напишите, когда закончите.
Может быть, есть способ просто сказать "перемотать назад сразу после последнего разделителя"? Или какой-либо способ использования each_with_index
и написать через номер индекса строки? Однако я не мог найти ничего подобного.
Лучшее решение, которое я имею до сих пор, - это прочитать строки по строкам, записать их в новый (временный) файл по линии (возможно, отредактированный), а затем перезаписать старый файл с помощью нового файла temp и удалить. Опять же, я чувствую, что должен быть лучший способ - я не думаю, что мне нужно будет создать новый 1gig файл, чтобы редактировать некоторые строки в существующем 1GB файле.