Simple Reading, Deleting and Writing to Files

S

Skeets

i have done some research, but can't see anything that explains simple
file writing. eventually, i may end using rexml, but for now i just
want to use a simple text file.

ip.txt contains three lines of text. they are as follows:

#ip 127.0.0.1
#email (e-mail address removed)
#duration 600

thanks to help i received on this forum, i know how to open the file.
i also figured out how to grep a line of text and then manipulate the
line so i get only the data of interest.

what i don't know how to do is to...

1. write this data to a newly created file (case: file doesn't exist)
2. overwrite the data (case: file exists but data needs to be updated).

eg, let's say my ip changed to 127.0.0.2. i want to delete "#ip
127.0.0.1" and replace it with "#ip 127.0.0.2". i i'd also consider if
deleting just 127.0.0.1 and replacing it with 127.0.0.2 if it makes
more sense.

can anyone point me to a tutorial or lend a hand?

tia...
 
J

James Britt

Skeets said:
what i don't know how to do is to...

1. write this data to a newly created file (case: file doesn't exist)

File.open( some_file_name, 'w'){|f| f.puts(the_data)}
2. overwrite the data (case: file exists but data needs to be updated).
You can use the same code. It will overwrite the current file with the
new data.
eg, let's say my ip changed to 127.0.0.2. i want to delete "#ip
127.0.0.1" and replace it with "#ip 127.0.0.2". i i'd also consider if
deleting just 127.0.0.1 and replacing it with 127.0.0.2 if it makes
more sense.

Just overwrite the old file with the new, complete, data.

can anyone point me to a tutorial or lend a hand?

Look at

http://www.ruby-doc.org/core/classes/IO.html

and

http://www.ruby-doc.org/core/classes/File.html

Note that the File class inherits from IO, so behavior of interest may
be defined in either place.

--
James Britt

http://www.ruby-doc.org - Ruby Help & Documentation
http://www.artima.com/rubycs/ - The Journal By & For Rubyists
http://www.rubystuff.com - The Ruby Store for Ruby Stuff
http://www.jamesbritt.com - Playing with Better Toys
http://www.30secondrule.com - Building Better Tools
 
S

Skeets

James said:
File.open( some_file_name, 'w'){|f| f.puts(the_data)}

You can use the same code. It will overwrite the current file with the
new data.


Just overwrite the old file with the new, complete, data.

thanks for the tip. at first glance, though, i'm thinking i want to
delete only the line(s) that change. eg, if the i line changes, i
don't want to read in the whole file, i'd prefer to just overwrite the
#ip line.

is this doable? if so, is it too much trouble for a short file like
this one?

i perused the linked references, but didn't find a way to delete a
specific line and replace it.

thanks again.
 
W

William James

Skeets said:
thanks for the tip. at first glance, though, i'm thinking i want to
delete only the line(s) that change. eg, if the i line changes, i
don't want to read in the whole file, i'd prefer to just overwrite the
#ip line.

is this doable? if so, is it too much trouble for a short file like
this one?

i perused the linked references, but didn't find a way to delete a
specific line and replace it.

thanks again.

Load the whole file that you want to change into an array.
Each element of the array is a line of the file.
Change a line.
Write the lines back to the file.
 
R

Robert Klemme

William said:
Load the whole file that you want to change into an array.
Each element of the array is a line of the file.
Change a line.
Write the lines back to the file.

Here's another alternative: use "ruby -i.bak" to change the file in
place, like

$ cat ip.txt
#ip 127.0.0.1
#email (e-mail address removed)
#duration 600

robert@fussel /cygdrive/c/Temp
$ ruby -i.bak -p -e '$_.gsub!(/^#ip (\d+(?:\.\d+){3})/, "#ip
127.0.0.2")' ip.txt

robert@fussel /cygdrive/c/Temp
$ cat ip.txt
#ip 127.0.0.2
#email (e-mail address removed)
#duration 600

robert@fussel /cygdrive/c/Temp
$ cat ip.txt.bak
#ip 127.0.0.1
#email (e-mail address removed)
#duration 600

robert@fussel /cygdrive/c/Temp
$

Kind regards

robert
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,209
Messages
2,571,088
Members
47,686
Latest member
scamivo

Latest Threads

Top