Чтение, редактирование и запись текстового файла построчно с использованием Ruby

Есть ли хороший способ читать, редактировать и записывать файлы на месте в 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 ГБ.

50
задан the Tin Man 26 November 2014 в 08:10
поделиться