Read/Writing to the same file

Hi All,

I’ve been lurking on this list for a while, and I have a basic question
that I’m hoping someone can help answer.

I have read the FAQ regarding file I/O, and I am still having problems.
Basically, I’m opening a file like this:

myfile = File.open("/home/n6tadam/the_file", “r+”)
arr[]

arr = myfile.readlines()
#change contents of arr

myfile.rewind()
myfile.print arr
myfile.close()

but still the file has not updated. Any ideas why? Also, when you want to
do in-place editing of the file, do you have to read the file into an
array first?

Hope that’s not too confusing,

– Thomas Adam

···

=====
Thomas Adam

“The Linux Weekend Mechanic” – www.linuxgazette.com


Want to chat instantly with your online friends? Get the FREE Yahoo!
Messenger http://uk.messenger.yahoo.com/

Hi All,

I’ve been lurking on this list for a while, and I have a basic question
that I’m hoping someone can help answer.

I have read the FAQ regarding file I/O, and I am still having problems.
Basically, I’m opening a file like this:

I can see two problems with the program

myfile = File.open(“/home/n6tadam/the_file”, “r+”)
arr

This line causes an error since arr hasn’t been initialised at this point

arr = myfile.readlines()
#change contents of arr

myfile.rewind()
myfile.print arr

This will put all the elements of arr on one line. If you want each element to
appear on a seperate line then you should use

myfile.puts arr

myfile.close()

aside from those two points the program works as expected.

but still the file has not updated. Any ideas why? Also, when you want to
do in-place editing of the file, do you have to read the file into an
array first?

Hope that’s not too confusing,

– Thomas Adam

Hope that helps

Best Regards

Mark Sparshatt

···

On Tuesday 02 Sep 2003 2:45 pm, Thomas Adam wrote:

— mark msparshatt@yahoo.co.uk wrote: > On Tuesday 02 Sep 2003 2:45
pm, Thomas Adam wrote:

Hi All,

I’ve been lurking on this list for a while, and I have a basic
question
that I’m hoping someone can help answer.

I have read the FAQ regarding file I/O, and I am still having
problems.
Basically, I’m opening a file like this:

I can see two problems with the program

myfile = File.open(“/home/n6tadam/the_file”, “r+”)
arr

This line causes an error since arr hasn’t been initialised at this
point

arr =

or arr = Array.new

arr = myfile.readlines()
#change contents of arr

myfile.rewind()
myfile.print arr

This will put all the elements of arr on one line. If you want each
element to
appear on a seperate line then you should use

myfile.puts arr

myfile.close()

aside from those two points the program works as expected.

The program was as an example only to illustrate my question which is
below…

—question—

but still the file has not updated. Any ideas why? Also, when you want
to
do in-place editing of the file, do you have to read the file into an
array first?
—end question—

Hope that helps

Yes, thanks :slight_smile: managed to remove my typos :slight_smile:

– Thomas Adam

···

=====
Thomas Adam

“The Linux Weekend Mechanic” – www.linuxgazette.com


Want to chat instantly with your online friends? Get the FREE Yahoo!
Messenger http://uk.messenger.yahoo.com/

— mark msparshatt@yahoo.co.uk wrote: > On Tuesday 02 Sep 2003 2:45

pm, Thomas Adam wrote:

Hi All,

I’ve been lurking on this list for a while, and I have a basic

question

that I’m hoping someone can help answer.

I have read the FAQ regarding file I/O, and I am still having

problems.

Basically, I’m opening a file like this:

I can see two problems with the program

myfile = File.open(“/home/n6tadam/the_file”, “r+”)
arr

This line causes an error since arr hasn’t been initialised at this
point

arr =

or arr = Array.new

Actually this line isn’t needed.
What you’re doing is creating an empty array then binding the variable arr to
it. Then with the next line you bind the variable arr to the result of
readlines, discarding the old value of arr.

arr = myfile.readlines()
#change contents of arr

myfile.rewind()
myfile.print arr

This will put all the elements of arr on one line. If you want each
element to
appear on a seperate line then you should use

myfile.puts arr

myfile.close()

aside from those two points the program works as expected.

The program was as an example only to illustrate my question which is
below…

—question—

but still the file has not updated. Any ideas why? Also, when you want

to

do in-place editing of the file, do you have to read the file into an
array first?

—end question—

I think that would be the simplest way.
If it’s a large file and you don’t want to read it into memory all at once
then what you could do is read the file in a line at a time, writing the
modified line to a temp file, then copy the tempfile over the origional.

Something like

require “ftools”
require “tempfile”

output = Tempfile.open(“temp”)
File.foreach(“test.txt”) do |line|
#process_line
output.puts line
end

output.close
File.cp(output.path, “test.txt”)

would do it.

Best Regards

Mark Sparshatt

···

On Tuesday 02 Sep 2003 3:24 pm, Thomas Adam wrote: