Forum: Ruby newbie qusetion: read a file and print out same file

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
870f5aa0e1f9e63f637d28b1c86f08b1?d=identicon&s=25 unknown (Guest)
on 2008-12-24 18:10
(Received via mailing list)
Hi All,

How do I read an input file and print it back to STDOUT
exactly as the original file.   This should be very simple
but the output of my program is all garbled.
What am I doing wrong?
( I am using http://www.rubycentral.com/book to learn Ruby)

The program, input, and runtime output are below.

Thanks, --JM
================= snip ==============

$ cat ./test56.rb
#!/usr/local/bin/ruby

inputFile = File.readlines("input4", 'r')

for item in inputFile
    item.chop()
    print item, "\n"
end
$
$ cat input4
car
tree
house
candy bar
paper
ocean
$ ./test56.rb
car

tr
ee
house
candy bar

paper

ocean
F53b05cdbdf561cfe141f69b421244f3?d=identicon&s=25 David A. Black (Guest)
on 2008-12-24 18:36
(Received via mailing list)
Hi --

On Thu, 25 Dec 2008, joemacbusiness@gmail.com wrote:

> Thanks, --JM
> end
You're working too hard :-)

   input_file = File.readlines("input4")
   puts input_file

or just

   puts File.read("input4")

If you do have occasion to loop through an array of lines (which no
doubt you will at some point), remember that chop doesn't do a
permanent chop. What you probably want is chomp!, which removes a
trailing newline if there is one.


David
870f5aa0e1f9e63f637d28b1c86f08b1?d=identicon&s=25 unknown (Guest)
on 2008-12-24 21:05
(Received via mailing list)
On Dec 24, 9:26 am, "David A. Black" <dbl...@rubypal.com> wrote:
> > What am I doing wrong?
> > inputFile = File.readlines("input4", 'r')
>
>
> --
> David A. Black / Ruby Power and Light, LLC
> Ruby/Rails consulting & training:http://www.rubypal.com
> Coming in 2009: The Well-Grounded Rubyist (http://manning.com/black2)


Hello David,

I wanted to loop through the input file "line-by-line"
and print it out the same way.  Sorry I did not make that
clear.
Here is the code block that does what I wanted.

inputFile = File.open("input4", 'r')
while line = inputFile.gets()
    puts line
end

Thank you, --JM
753dcb78b3a3651127665da4bed3c782?d=identicon&s=25 Brian Candler (candlerb)
on 2008-12-25 11:44
unknown wrote:
> $ cat input4
> car
> tree
> house
> candy bar
> paper
> ocean
> $ ./test56.rb
> car
>
> tr
> ee
> house
> candy bar
>
> paper
>
> ocean

Interesting output, especially the split 'tree'. To see what's going on,
I added an extra line to your code:

inputFile = File.readlines("input4", 'r')
p inputFile

This gives the following output:

["car", "\ntr", "ee\nhouse\ncandy bar", "\npaper", "\nocean\n"]

To understand what's happening here, read the documentation under "ri
IO::readlines"

---------------------------------------------------------- IO::readlines
     IO.readlines(name, sep_string=$/)   => array
------------------------------------------------------------------------
     Reads the entire file specified by _name_ as individual lines, and
     returns those lines in an array. Lines are separated by
     _sep_string_.

        a = IO.readlines("testfile")
        a[0]   #=> "This is line one\n"

So, the problem is that the 'r' is not the file input mode, but the
separator character! The fact you had the words "car", "bar" and "paper"
(all ending in 'r') made this rather unclear. It looks like it's mostly
splitting at the end of a line, but actually it's splitting after a
letter 'r'.
This topic is locked and can not be replied to.