Checking File for a line

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-forum.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

Hope the helps.

Regards,
Lee

···

--
Posted via http://www.ruby-forum.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

···

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

--
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

···

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

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-forum.com/\.

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

···

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.

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

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}

:slight_smile:

Kind regards

robert

···

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.

--
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

···

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}

:slight_smile:

Kind regards

robert

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

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}

:slight_smile:

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-forum.com/\.