This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.

Reading the Contents of a File
CodeExpectedActual
#Put some stuff into a file.
open('sample_file', 'w') do |f| 
  f.write("This is line one.\nThis is line two.") 
end
Then read it back out.
open('sample_file') { |f| f.read }
"This is line one.\nThis is line two." "This is line one.\nThis is line two."
File.read('sample_file')
"This is line one.\nThis is line two." "This is line one.\nThis is line two."
open('sample_file') { |f| f.readlines }
["This is line one.\n", "This is line two."] ["This is line one.\n", "This is line two."]
open('sample_file').each { |x| p x }
"This is line one.\n"
"This is line two."
"This is line one.\n"
"This is line two."
puts open('conclusion') { |f| f.read(50) }
"I know who killed Mr. Lambert," said Joe. "It was
Create a file...
Error! (Exception?) Here's stdout:
Errno::ENOENT: No such file or directory - conclusion
	from (irb):9:in `initialize'
	from (irb):9
open('end_separated_records', 'w') do |f|
  f << %{This is record one.
It spans multiple lines.ENDThis is record two.END}
end
And read it back in.
open('end_separated_records') { |f| f.each('END') { |record| p record } }
"This is record one.\nIt spans multiple lines.END"
"This is record two.END"
Create a file...
"This is record one.\nIt spans multiple lines.END"
"This is record two.END"
open('pipe_separated_records', 'w') do |f|
  f << "This is record one.|This is record two.|This is record three."
end
And read it back in.
open('pipe_separated_records') { |f| f.readlines('|') }
["This is record one.|", "This is record two.|", ["This is record one.|", "This is record two.|", "This is record three."]
open('newline_separated_records', 'w') do |f|
  f.puts 'This is record one. It cannot span multiple lines.'
  f.puts 'This is record two.'
end
open('newline_separated_records') { |f| f.each { |x| p x } }
"This is record one. It cannot span multiple lines.\n"
"This is record two.\n"
"This is record one. It cannot span multiple lines.\n"
"This is record two.\n"
open('file_from_unknown_os') { |f| f.read().split(/\r?\n|\r(?!\n)/) }
"This line has a Unix/Mac OS X newline.\n".chomp
"This line has a Unix/Mac OS X newline." "This line has a Unix/Mac OS X newline."
"This line has a Windows newline.\r\n".chomp
"This line has a Windows newline." "This line has a Windows newline."
"This line has an old-style Macintosh newline.\r".chomp
"This line has an old-style Macintosh newline." "This line has an old-style Macintosh newline."
"This string contains two newlines.\n\n".chomp
"This string contains two newlines.\n"
'This is record two.END'.chomp('END')
"This is record two." "This is record two."
'This string contains no newline.'.chomp
"This string contains no newline." "This string contains no newline."
open('pipe_separated_records') do |f| 
  f.each('|') { |l| puts l.chomp('|') }
end
This is record one.
This is record two.
This is record three.
This is record one.
This is record two.
This is record three.
lines = open('pipe_separated_records') { |f| f.readlines('|') }
["This is record one.|", "This is record two.|", ["This is record one.|", "This is record two.|", "This is record three."]
lines.each { |l| l.chomp!('|') }
["This is record one.", "This is record two.", "This is record three."] ["This is record one.", "This is record two.", "This is record three."]
class File
  def each_chunk(chunk_size=1024)
    yield read(chunk_size) until eof?
  end
end
open("pipe_separated_records") do |f|
  f.each_chunk(15) { |chunk| puts chunk }
end
This is record
one.|This is re
cord two.|This
is record three
.
This is record 
one.|This is re
cord two.|This 
is record three
.