Help with regular expressions

Hi all,

I'm fairly new to programming with regular expressions. I would like
some help with the
following. Consider the format given below as what I will receive in a
file.

While reading from the file, Im interested only in reading those lines
that have the forward-slash' in
them (lines 9,10,12, 13). How can I do this in ruby?

1. -------------------------------
2. Version 2.05 bla bla
3. bla bla
4. bla
5.
6. ------------------------------
7. xx 0.0 4.5 6.7
8. xx (yy) 2.0 4.5 5.6
9. a/b/c/d () 6.0 2.0 3.4
10. a/b/c/d (yy)
11.
12. h/j/k/l/m 5.0 9.0 8.9
13. h/j/k/l/m ()
14.
15. xx 0.0 0.0 0.0
16. yy 8.9 8.9 8.0
17. ---------------------------------------

Thank you for your time & help
Vandana

Vandana wrote:

Hi all,

I'm fairly new to programming with regular expressions. I would like
some help with the
following. Consider the format given below as what I will receive in a
file.

While reading from the file, Im interested only in reading those lines
that have the forward-slash' in
them (lines 9,10,12, 13). How can I do this in ruby?

(...)

You don't need a regular expression for this. To select the lines which
include a slash, you can do

file = File.new( 'D:/1.txt' )
slashlines = file.select {|line| line.include?( '/' )}
file.close
puts slashlines

The select method will read each line and put each line for which the
block is true in an array.

hth,

Siep

···

--
Posted via http://www.ruby-forum.com/\.

Vandana wrote:

Hi all,

I'm fairly new to programming with regular expressions. I would like
some help with the
following. Consider the format given below as what I will receive in a
file.

While reading from the file, Im interested only in reading those lines
that have the forward-slash' in
them (lines 9,10,12, 13). How can I do this in ruby?

1. -------------------------------
2. Version 2.05 bla bla
3. bla bla
4. bla
5.
6. ------------------------------
7. xx 0.0 4.5 6.7
8. xx (yy) 2.0 4.5 5.6
9. a/b/c/d () 6.0 2.0 3.4
10. a/b/c/d (yy)
11.
12. h/j/k/l/m 5.0 9.0 8.9
13. h/j/k/l/m ()
14.
15. xx 0.0 0.0 0.0
16. yy 8.9 8.9 8.0
17. ---------------------------------------

Thank you for your time & help
Vandana

Awk:

awk "/\//" myfile

Ruby:

ruby -ne "print if /\//" myfile

···

--

Vandana wrote:

While reading from the file, Im interested only in reading those lines
that have the forward-slash' in
them (lines 9,10,12, 13). How can I do this in ruby?

file.grep %r(/)
or
file.grep /\//

HTH,
Sebastian

···

--
Jabber: sepp2k@jabber.org
ICQ: 205544826

Siep, I can't find any documentation on File#select, and IO#select is not
documented as doing what you show. Could you provide more info about it?

Thanks,
Craig

···

On Fri, Oct 24, 2008 at 6:05 PM, Siep Korteling <s.korteling@gmail.com>wrote:

You don't need a regular expression for this. To select the lines which
include a slash, you can do

file = File.new( 'D:/1.txt' )
slashlines = file.select {|line| line.include?( '/' )}
file.close
puts slashlines

The select method will read each line and put each line for which the
block is true in an array.

It is a method from Enumerable.

ri Enumerable#select

Michael Guterl

···

On Fri, Oct 24, 2008 at 7:12 PM, Craig Demyanovich <cdemyanovich@gmail.com> wrote:

On Fri, Oct 24, 2008 at 6:05 PM, Siep Korteling <s.korteling@gmail.com>wrote:

You don't need a regular expression for this. To select the lines which
include a slash, you can do

file = File.new( 'D:/1.txt' )
slashlines = file.select {|line| line.include?( '/' )}
file.close
puts slashlines

The select method will read each line and put each line for which the
block is true in an array.

Siep, I can't find any documentation on File#select, and IO#select is not
documented as doing what you show. Could you provide more info about it?

I couldn't find it explicitly in the docks either, but if you do
File.ancestors, you will see that Enumerable is in there.

To the OP, you could also do (for regex)...

slashlines = my_file.select {|line| line =~ /\//}

Todd

···

On Fri, Oct 24, 2008 at 6:12 PM, Craig Demyanovich <cdemyanovich@gmail.com> wrote:

On Fri, Oct 24, 2008 at 6:05 PM, Siep Korteling <s.korteling@gmail.com>wrote:

You don't need a regular expression for this. To select the lines which
include a slash, you can do

file = File.new( 'D:/1.txt' )
slashlines = file.select {|line| line.include?( '/' )}
file.close
puts slashlines

The select method will read each line and put each line for which the
block is true in an array.

Siep, I can't find any documentation on File#select, and IO#select is not
documented as doing what you show. Could you provide more info about it?

D'oh, didn't think of Enumerable for some reason. Time to learn more about
file I/O.

Thanks,
Craig

···

On Fri, Oct 24, 2008 at 7:17 PM, Michael Guterl <mguterl@gmail.com> wrote:

It is a method from Enumerable.

ri Enumerable#select

# I couldn't find it explicitly in the docks either, but if you do
# File.ancestors, you will see that Enumerable is in there.

qri can find it

botp@botp-desktop:~$ qri File#select
------------------------------------------------------ Enumerable#select
     enum.find_all {| obj | block } => array
     enum.select {| obj | block } => array

···

From: Todd Benson [mailto:caduceass@gmail.com]
------------------------------------------------------------------------
     Returns an array containing all elements of enum for which block
     is not false (see also Enumerable#reject).

        (1..10).find_all {|i| i % 3 == 0 } #=> [3, 6, 9]

Thanks to all!

I used f.grep(/\//) to read the lines that were needed.

Thanks once more.

···

From: Todd Benson [mailto:caduce...@gmail.com]

# I couldn't find it explicitly in the docks either, but if you do
# File.ancestors, you will see that Enumerable is in there.

qri can find it

botp@botp-desktop:~$ qri File#select
------------------------------------------------------ Enumerable#select
enum.find_all {| obj | block } => array
enum.select {| obj | block } => array
------------------------------------------------------------------------
Returns an array containing all elements of enum for which block
is not false (see also Enumerable#reject).

    \(1\.\.10\)\.find\_all \{|i|  i % 3 == 0 \}   \#=&gt; \[3, 6, 9\]