Hi,
To edit a file in place, you could try something like
File.open('file.rb', 'r+') do |file|
file.each do |line|
if line =~ /line text/
file.seek(-line.size, IO::SEEK_CUR)
file.puts("Hello")
end
end
end
Note the minus before line.size. This will probably fall over on
non-ascii files, as you're seeking back too little (String#size
returns the number of letters).
However, this is a C-ish approach, and unless you want your programme
to run on a tamagotchi, or something, you're probably better off just
reading in one file, and writing to another.
2008/6/19 Chris Conley <chris.m.conley / gmail.com>:
> Hello,
>
> I'm trying to insert new text into the middle of a file with the
> following:
>
> file = File.open("file.rb", "r+")
> file.each { |line|
> if line.match(/line text/)
> file.puts("hello")
> end
> }
>
> This works fine except that it overwrites the existing 5 characters to
> replace with "hello". Is there a way to insert a new line with new
> text without overwriting any existing data?
>
> Thanks!
> Chris
>
>
--
JJ