[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

read file and print contents - beginner

Johnathan Smith

12/3/2007 3:57:00 PM

hello,

im new to ruby and i have a text file and want to read in the file
and print it out.

so far iv got the following. I'd greatly appreciate any help.

thanks.

text file (reference.txt):
Tag: ref1
Type: Book
Author: Little, S R

ruby file:
#!/usr/local/bin/ruby
#
#
# read file and print
#
ARGV.each do |fn|
begin
(fn == '-' ? STDIN : File.open(fn)).each_line do |l|
if $indent > 0
(1..$indent).each { print ' ' }
end
puts l
end
--
Posted via http://www.ruby-....

4 Answers

Christian von Kleist

12/3/2007 4:08:00 PM

0

I would change

if $indent > 0
(1..$indent).each { print ' ' }
end

to

print ' ' * $indent

On Dec 3, 2007 10:57 AM, Johnathan Smith <stu_09@hotmail.com> wrote:
> hello,
>
> im new to ruby and i have a text file and want to read in the file
> and print it out.
>
> so far iv got the following. I'd greatly appreciate any help.
>
> thanks.
>
> text file (reference.txt):
> Tag: ref1
> Type: Book
> Author: Little, S R
>
> ruby file:
> #!/usr/local/bin/ruby
> #
> #
> # read file and print
> #
> ARGV.each do |fn|
> begin
> (fn == '-' ? STDIN : File.open(fn)).each_line do |l|
> if $indent > 0
> (1..$indent).each { print ' ' }
> end
> puts l
> end
> --
> Posted via http://www.ruby-....
>
>

Johnathan Smith

12/3/2007 4:17:00 PM

0

I've changed my approach as i dont actually want to count the lines

so i now have this:

ARGV.each do |fn|
begin
(fn == 'reference.txt' ? STDIN : File.open(fn)).each_line do |l|
puts l
end

by this im trying to read in the text file and print out its contents

i seem to be getting a load error
any reason why?

thank you
--
Posted via http://www.ruby-....

Christian von Kleist

12/3/2007 4:42:00 PM

0

On Dec 3, 2007 11:16 AM, Johnathan Smith <stu_09@hotmail.com> wrote:
> I've changed my approach as i dont actually want to count the lines
>
> so i now have this:
>
> ARGV.each do |fn|
> begin
> (fn == 'reference.txt' ? STDIN : File.open(fn)).each_line do |l|
> puts l
> end
>
> by this im trying to read in the text file and print out its contents
>
> i seem to be getting a load error
> any reason why?
>
> thank you
> --
>
> Posted via http://www.ruby-....
>
>

You're missing two `end` lines:

ARGV.each do |fn|
begin
(fn == '-' ? STDIN : File.open(fn)).each_line do |l|
puts l
end
end
end

Sorry, I thought we were just looking at a fragment of your code
before, so I didn't comment on the missing `end` lines.

Andrei Maxim

12/3/2007 5:08:00 PM

0

On 12/3/07, Johnathan Smith <stu_09@hotmail.com> wrote:
> I've changed my approach as i dont actually want to count the lines
>
> so i now have this:
>
> ARGV.each do |fn|
> begin
> (fn == 'reference.txt' ? STDIN : File.open(fn)).each_line do |l|
> puts l
> end

ARGV.each will iterate through every parameter you pass. Since your
script is so simple, you're better of with ARGV[0]. You'd have to
check the length and see if ARGV.length == 1.

A more Ruby-like approach is this:

#!/usr/bin/env ruby -wKU

if ARGV.length != 1
puts "Syntax is: ruby readfile.rb filename"
exit
end

File.open(ARGV[0], "r") do |file|
while line = file.gets
puts line
end
end

Using File.open with a block will automatically open and close the
file handler and that's a pretty decent practice to start with.

I'd highly recommend you the PickAxe book (Programming Ruby, 2nd
edition). It does a great job explaining Ruby concepts (the code above
is just a rip-off from Mr. Thomas's example on page 129). However,
I've heard people complaining that it's a bit daunting for new
programmers. Maybe you'd feel a bit better with Learning to Program by
Chris Pine if words like "iterators" and "inheritance" make you sweat.
--
Andrei Maxim
http://andr...