Help with regular expressions


#1

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. Version 2.05 bla bla
  2. bla bla
  3. bla

  4. xx 0.0 4.5 6.7
  5. xx (yy) 2.0 4.5 5.6
  6. a/b/c/d () 6.0 2.0 3.4
  7. a/b/c/d (yy)
  8. h/j/k/l/m 5.0 9.0 8.9
  9. h/j/k/l/m ()
  10. xx 0.0 0.0 0.0
  11. yy 8.9 8.9 8.0

Thank you for your time & help
Vandana


#2

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


#3

On Fri, Oct 24, 2008 at 6:05 PM, Siep K.
removed_email_address@domain.invalidwrote:

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?

Thanks,
Craig


#4

On Fri, Oct 24, 2008 at 7:17 PM, Michael G. removed_email_address@domain.invalid
wrote:

It is a method from Enumerable.

ri Enumerable#select

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

Thanks,
Craig


#5

On Fri, Oct 24, 2008 at 7:12 PM, Craig D.
removed_email_address@domain.invalid wrote:

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?

It is a method from Enumerable.

ri Enumerable#select

Michael G.


#6

On Fri, Oct 24, 2008 at 6:12 PM, Craig D.
removed_email_address@domain.invalid wrote:

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


#7

Vandana wrote:

  1. h/j/k/l/m 5.0 9.0 8.9
  2. h/j/k/l/m ()
  3. xx 0.0 0.0 0.0
  4. yy 8.9 8.9 8.0

Thank you for your time & help
Vandana

Awk:

awk “///” myfile

Ruby:

ruby -ne “print if ///” myfile


#8

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


#9

From: Todd B. [mailto:removed_email_address@domain.invalid]

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 }   #=> [3, 6, 9]

#10

Thanks to all!

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

Thanks once more.

From: Todd B. [mailto:removed_email_address@domain.invalid]