[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Checking File for a line

Peter Loftus

11/23/2007 10:30:00 AM

Need to check a file for a line
Lets say "this is an example"

I am going to just take every line into an array
and then have a For loop to check the array for that line.

Im pretty sure this will work but is there any cleaner way to do it?
--
Posted via http://www.ruby-....

8 Answers

Lee Jarvis

11/23/2007 11:01:00 AM

0

Peter Loftus wrote:
> Im pretty sure this will work but is there any cleaner way to do it?

File.readlines('file.txt.).each do |line|
puts 'got it!' if line =~ /regexp/
end

Hope the helps.

Regards,
Lee
--
Posted via http://www.ruby-....

Robert Klemme

11/23/2007 12:08:00 PM

0

2007/11/23, Lee Jarvis <jarvo88@gmail.com>:
> Peter Loftus wrote:
> > Im pretty sure this will work but is there any cleaner way to do it?
>
> File.readlines('file.txt.).each do |line|
> puts 'got it!' if line =~ /regexp/
> end

This is more efficient - no need to load the whole file into mem to
find a single line:

File.foreach "file.txt" do |line|
if /rx/ =~ line
puts "found it"
break
end
end

Cheers

robert

--
use.inject do |as, often| as.you_can - without end

Dejan Dimic

11/23/2007 12:45:00 PM

0

On Nov 23, 1:08 pm, Robert Klemme <shortcut...@googlemail.com> wrote:
> 2007/11/23, Lee Jarvis <jarv...@gmail.com>:
>
> > Peter Loftus wrote:
> > > Im pretty sure this will work but is there any cleaner way to do it?
>
> > File.readlines('file.txt.).each do |line|
> > puts 'got it!' if line =~ /regexp/
> > end
>
> This is more efficient - no need to load the whole file into mem to
> find a single line:
>
> File.foreach "file.txt" do |line|
> if /rx/ =~ line
> puts "found it"
> break
> end
> end
>
> Cheers
>
> robert
>
> --
> use.inject do |as, often| as.you_can - without end

Check out

ri IO:foreach
ri IO#each

and use what more suits your needs.

Dima

Robert Klemme

11/23/2007 5:37:00 PM

0

2007/11/23, Dejan Dimic <dejan.dimic@gmail.com>:
> On Nov 23, 1:08 pm, Robert Klemme <shortcut...@googlemail.com> wrote:
> > 2007/11/23, Lee Jarvis <jarv...@gmail.com>:
> >
> > > Peter Loftus wrote:
> > > > Im pretty sure this will work but is there any cleaner way to do it?
> >
> > > File.readlines('file.txt.).each do |line|
> > > puts 'got it!' if line =~ /regexp/
> > > end
> >
> > This is more efficient - no need to load the whole file into mem to
> > find a single line:
> >
> > File.foreach "file.txt" do |line|
> > if /rx/ =~ line
> > puts "found it"
> > break
> > end
> > end
> >
> > Cheers
> >
> > robert
> >
> > --
> > use.inject do |as, often| as.you_can - without end
>
> Check out
>
> ri IO:foreach
> ri IO#each
>
> and use what more suits your needs.

I am not sure I understand this posting of yours. Are you talking to
the OP or to me? If you are talking to me, foreach is what I used in
the example above.

robert

--
use.inject do |as, often| as.you_can - without end

Lee Jarvis

11/23/2007 6:42:00 PM

0

> This is more efficient - no need to load the whole file into mem to
> find a single line:
>
> File.foreach "file.txt" do |line|
> if /rx/ =~ line
> puts "found it"
> break
> end
> end
>
> Cheers
>
> robert

Ahh, good point, touche my good man.

Regards,
Lee

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

Robert Klemme

11/24/2007 7:59:00 AM

0

2007/11/23, Lee Jarvis <jarvo88@gmail.com>:
> > This is more efficient - no need to load the whole file into mem to
> > find a single line:
> >
> > File.foreach "file.txt" do |line|
> > if /rx/ =~ line
> > puts "found it"
> > break
> > end
> > end
> >
> > Cheers
> >
> > robert
>
> Ahh, good point, touche my good man.

While we're at it: there is another solution - probably a bit more elegant:

require 'enumerator'
File.to_enum(:foreach,"file.txt").grep(/rx/) {|li| puts li; break}

:-)

Kind regards

robert

--
use.inject do |as, often| as.you_can - without end

Dejan Dimic

11/25/2007 6:10:00 PM

0

On Nov 24, 8:58 am, Robert Klemme <shortcut...@googlemail.com> wrote:
> 2007/11/23, Lee Jarvis <jarv...@gmail.com>:
>
> > > This is more efficient - no need to load the whole file into mem to
> > > find a single line:
>
> > > File.foreach "file.txt" do |line|
> > > if /rx/ =~ line
> > > puts "found it"
> > > break
> > > end
> > > end
>
> > > Cheers
>
> > > robert
>
> > Ahh, good point, touche my good man.
>
> While we're at it: there is another solution - probably a bit more elegant:
>
> require 'enumerator'
> File.to_enum(:foreach,"file.txt").grep(/rx/) {|li| puts li; break}
>
> :-)
>
> Kind regards
>
> robert
>
> --
> use.inject do |as, often| as.you_can - without end

That's Ruby beauty, express yourself in a way that suits you the most
and still we all can understand your dialect and enjoy.

Dima

7stud --

11/25/2007 7:45:00 PM

0

Dejan Dimic wrote:
> On Nov 24, 8:58 am, Robert Klemme <shortcut...@googlemail.com> wrote:
>> > > end
>> File.to_enum(:foreach,"file.txt").grep(/rx/) {|li| puts li; break}
>>
>> :-)
>>
>> Kind regards
>>
>> robert
>>
>> --
>> use.inject do |as, often| as.you_can - without end
>
> That's Ruby beauty, express yourself in a way that suits you the most
> and still we all can understand your dialect and enjoy.
>

Speak for yourself. I found that solution particularly distasteful. It
turned a simple, easy to read solution, into a convoluted one-liner
mess. And on my system the enumerator solution is 50% slower. But,
that seems to be the Ruby Way, so at some point I guess I'll have to
drink the koolaid and declare how beautiful solutions like that are.
--
Posted via http://www.ruby-....