File.puts or File.write ?

  • Thread starter Joe Ruby MUDCRAP-CE
  • Start date
J

Joe Ruby MUDCRAP-CE

For general purpose file writing, does it matter whether puts or write
is used? From the docs, it seems like puts should be used for strings,
while write can be used for anything. I'm not really sure what
difference there is between the two, but the docs say something about
puts adding newlines or something.

Thanks,
Joe
 
J

Justin Collins

Joe said:
For general purpose file writing, does it matter whether puts or write
is used? From the docs, it seems like puts should be used for strings,
while write can be used for anything. I'm not really sure what
difference there is between the two, but the docs say something about
puts adding newlines or something.

Thanks,
Joe

Yes, using puts adds a newline to the end of the output, while write and
print do not. So, yes, it can matter a great deal which one you use.

-Justin
 
W

Wilson Bilkovich

Yes, using puts adds a newline to the end of the output, while write and
print do not. So, yes, it can matter a great deal which one you use.

puts only does that when you're not in binary mode, though. I have yet
to use 'write' for anything, at least as far as I can recall.
 
J

Jan Svitok

puts only does that when you're not in binary mode, though. I have yet
to use 'write' for anything, at least as far as I can recall.

And IIRC write is atomic - 'puts' consists of two 'write's, so there
may be a thread switch between them (at least on current
implementation). In other words, if writing to a file from more
threads, 'write (string + "\n")' should be always right, while using
'puts string' the end-of-lines might be crossed. (string1 string2 eol1
eol2).
 
R

Robert Klemme

Joe said:
For general purpose file writing, does it matter whether puts or write
is used? From the docs, it seems like puts should be used for strings,
while write can be used for anything. I'm not really sure what
difference there is between the two, but the docs say something about
puts adding newlines or something.

I tend to view #puts and #print as printing methodsi, i.e. for textual
output. Note also that they accept multiple parameters.

#write on the other hand is more low level and is actually sending off
the string it gets to the underlying stream whereas #puts applies some
modifications (newline, special treatment of things that implement
#to_ary etc.)

Typically I use #write for stream copy operations like

File.open("foo", "rb") do |in|
File.open("bar", "wb") do |out|
while ( buffer = in.read( 1024 ) )
out.write( buffer )
end
end
end

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,215
Messages
2,571,113
Members
47,708
Latest member
SharonMaes

Latest Threads

Top