2010-07-23 4 views
1

Я открыл свой существующий файл в режиме r +.Вставить строки по определенной строке в файл

open ("# {RAILS_ROOT} /locale/app.pot", 'r +') do | f |

конец

Я хочу, чтобы вставить некоторые другие строки в определенной строке нет .. Как я хочу вставить «HII» на номер строки 10. «привет» на номер строки 2. «мир» на линии номер 20.

Как я могу справиться с этим в рубине ??

ответ

6

Это работает для меня в прошлом:

def write_at(fname, at_line, sdat) 
    open(fname, 'r+') do |f| 
    while (at_line-=1) > 0   # read up to the line you want to write after 
     f.readline 
    end 
    pos = f.pos      # save your position in the file 
    rest = f.read     # save the rest of the file 
    f.seek pos      # go back to the old position 
    f.write sdat     # write new data 
    f.write rest     # write rest of file 
    end 
end 
+2

Мне пришлось внести несколько исправлений: f.write sdat, а затем f.write rest. Также необходимо убедиться, что sdat имеет новую строку (если вы этого хотите). – nilanjan

+1

Отредактированный код, чтобы он работал должным образом. Так оно и было, оно только вставило массив в файл, который был не совсем ('[blah, остальная часть документа в одной строке]'). Хороший вклад @jdeseno! – JGutierrezC

1

Это не может быть лучшим способом Ruby, но в целом, когда мне приходилось это делать в прошлом, я бы открыл выходной файл с глобально уникальным именем и пошел по строке, читая и записывая от одного до другие, сохраняя подсчет линий на этом пути. (Это не самая большая вещь в мире, чтобы сохранить, но это очень просто реализовать)

+0

Это мой образец для единовременных манипуляций файлов I необходимо выполнить. Я нахожу себя использующим ruby ​​вместо какой-то длинной формулы excel. – holaSenor

Смежные вопросы