Forum: Ruby Finding and writing to specified area in a text file

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Ryan M. (Guest)
on 2008-11-14 23:12
Hello,

I'm trying to find a specified keyword in a text file that I have open
then replace the line of that keyword with some new text.  Is it
possible do do this?

So something like:

#custom.txt
hello world
INSERT
end of hello world

So INSERT would be swapped with some new text.

Thanks
Aldric G. (Guest)
on 2008-11-15 01:10
(Received via mailing list)
In all of my research online, the only way that I've found to do it is
to read the entire file, replace what you wanna replace, write to a new
file, then copy over the original one. I hope someone can show me a
better way.

--Aldric
Ryan M. (Guest)
on 2008-11-15 01:18
Aldric G. wrote:
> In all of my research online, the only way that I've found to do it is
> to read the entire file, replace what you wanna replace, write to a new
> file, then copy over the original one. I hope someone can show me a
> better way.
>
> --Aldric

Hi Aldric,

I'm actually looking to replace some text/code in 3-4 places so i can't
hardcode specific lines into the model because they could change.  All
of this needs to be done on a button click so the actual file is hidden
from the user.  I'm eventually wanting to add form input boxes and use
them to replace the text/code areas.

Thanks for your help.  Please could you put up some of your code for me
to study?
Michael T. (Guest)
on 2008-11-20 18:51
A gsub (global substitution) should take care of the problem. Here's an
example of how I might do this:

######################################################

data = ""

File.open("my_file.txt", "r") do |file|
  data = file.read.gsub("INSERT", "new word")
end

File.open("my_file.txt", "w") do |file|
  data = file.write(data)
end

######################################################

The gsub command also supports regular expressions, if you need it.
George O. (Guest)
on 2008-11-20 18:55
Aldric G. wrote:
> In all of my research online, the only way that I've found to do it is
> to read the entire file, replace what you wanna replace, write to a new
> file, then copy over the original one. I hope someone can show me a
> better way.
>
> --Aldric

You know , there is an alternative to writing to a new file . You will
have to read the file contents , modify them , seek to the file's start
, write the modified contents and truncate at the current position .
This topic is locked and can not be replied to.