The number of lines of a file?

Hi, Ruby Fans :

I would like to write a simple program, which can read random line:
( file.txt has 7 lines )

1: srand 5269
2: f = File.new( "file.txt", "r" )
3: print f.readlines[ rand(6) ]

Thus I can get one line in file.txt by random. ( of course easily. )
Still, the "file.txt" will not only be a 7-lines file, right ? :wink:
How can I get the number of lines of a file ?
So that I can get one line in file.txt by random
more flexibly just like:

1: srand 5269
2: f = File.new( "file.txt", "r" )
3: print f.readlines[ rand( lines_of_file-1 ) ]

However, I don't want to "loop" the loop :frowning:
Is there any object or method I can use ?

Thanks,

polarpolar
(Is Ruby a singer?)

Hi, Ruby Fans :

I would like to write a simple program, which can read random line:
( file.txt has 7 lines )

1: srand 5269
2: f = File.new( "file.txt", "r" )
3: print f.readlines[ rand(6) ]

mh.. aFile.is_a? Enumerable, use Enumerable.to_a :slight_smile:

Thus I can get one line in file.txt by random. ( of course easily. )
Still, the "file.txt" will not only be a 7-lines file, right ? :wink:
How can I get the number of lines of a file ?

you have to read it. The basic concept of "line" is determined by how
you define it in your program.

So that I can get one line in file.txt by random
more flexibly just like:

1: srand 5269
2: f = File.new( "file.txt", "r" )
3: print f.readlines[ rand( lines_of_file-1 ) ]
However, I don't want to "loop" the loop :frowning:
Is there any object or method I can use ?

dunno what you mean by "loop the loop", sorry.

Anyway this may work:
words=File.read('w.txt').split("\n")
word= words[rand(words.size)-1]

路路路

il Sat, 24 Jul 2004 18:29:59 +0800, polarpolar <polarpolar@infor.org> ha scritto::

polarpolar wrote:

Hi, Ruby Fans :

I would like to write a simple program, which can read random line:
( file.txt has 7 lines )

1: srand 5269
2: f = File.new( "file.txt", "r" )
3: print f.readlines[ rand(6) ]

Thus I can get one line in file.txt by random. ( of course easily. )
Still, the "file.txt" will not only be a 7-lines file, right ? :wink:
How can I get the number of lines of a file ?
So that I can get one line in file.txt by random
more flexibly just like:

1: srand 5269
2: f = File.new( "file.txt", "r" )
3: print f.readlines[ rand( lines_of_file-1 ) ]

this way should work

srand 5269
lines = File.readlines("file.txt")
print lines[rand(lines.length)]

it reads the file into an array and then uses the length of the array

HTH

路路路

--
Mark Sparshatt

gabriele renzi 鎻愬埌:

Anyway this may work:
words=File.read('w.txt').split("\n")
word= words[rand(words.size)-1]

Thank you.
I will learn more about the "line" :slight_smile:

polarpolar

I think you want

  lines = File.readlines('w.txt')
  random_line = lines[rand(lines.size)]

rand(n) returns an integer in the range 0...n, which is good for an
array index.

Gavin

路路路

On Saturday, July 24, 2004, 8:41:58 PM, gabriele wrote:

So that I can get one line in file.txt by random
more flexibly just like:

1: srand 5269
2: f = File.new( "file.txt", "r" )
3: print f.readlines[ rand( lines_of_file-1 ) ]
However, I don't want to "loop" the loop :frowning:
Is there any object or method I can use ?

dunno what you mean by "loop the loop", sorry.

Anyway this may work:
words=File.read('w.txt').split("\n")
word= words[rand(words.size)-1]

oops about rand(). OTOH I was pointing out the 'line is a user defined
concept' thingy by not using readlines.

路路路

il Sat, 24 Jul 2004 20:07:31 +0900, Gavin Sinclair <gsinclair@soyabean.com.au> ha scritto::

I think you want

lines = File.readlines('w.txt')
random_line = lines[rand(lines.size)]

rand(n) returns an integer in the range 0...n, which is good for an
array index.