Finding and writing to specified area in a text file


#1

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


#2

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


#3

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?


#4

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 .


#5

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.