views:

29

answers:

2

I have opened my existing file in r+ mode.

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

end

I want to insert some other rows at specific line no.. Like i want insert "Hii " on line number 10. "hello " on line number 2. "world " on line number 20.

How may i handle it in ruby ??

A: 

This may not be the best Ruby way, but in general when I have had to do this in the past, I would open an output file with a globally unique name and go line by line reading and writing from one to the other, keeping line count along the way. (it isn't the greatest thing in the world to maintain, but it's very simple to implement)

Gabriel
+1  A: 

This has worked for me in the past:

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, rest]            # write new data & rest of file
  end
end
jdeseno