Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Regexp.match(line) question

Reply
Thread Tools

Regexp.match(line) question

 
 
m b
Guest
Posts: n/a
 
      06-13-2011

Hi=2C
I new to Ruby. It's a lot of fun to learn..

if I do this:

f=3Dopen('filename.dat'=2C'r')
str=3Df.read

and then:

str.each_line do |line|
/ruby/.match(line)

ruby prints out variable line and say its a RegexpError
'empty range in character class' as if it interprets line as a Regexp
What am I doing wrong? There are a lot of strange characters in variable l=
ine=2C
maybe that is the issue?
=

 
Reply With Quote
 
 
 
 
Jesús Gabriel y Galán
Guest
Posts: n/a
 
      06-13-2011
On Mon, Jun 13, 2011 at 7:32 PM, m b <(E-Mail Removed)> wrote:
>
> Hi,
> I new to Ruby. =A0It's a lot of fun to learn..
>
> if I do this:
>
> f=3Dopen('filename.dat','r')
> str=3Df.read
>
> and then:
>
> str.each_line =A0do |line|
> =A0 =A0/ruby/.match(line)
>
> ruby prints out variable line and say its a RegexpError
> 'empty range in character class' =A0as if it interprets =A0line as a Rege=

xp
> What am I doing wrong? =A0There are a lot of strange characters in variab=

le line,
> maybe that is the issue?


I'm not sure about the issue, but the usual idiom for this is:

File.foreach("filename.dat") do |line|
line.match(/ruby/)
end

This way:
- The file handler is automatically closed for you, you don't have to
ensure that you call close on it, it's done for you.
- You only have one line at a time in memory, since that seems to be
your unit of data. If the file is huge it will make a difference in
the amount of memory you will consume at a time.

In any case, String#match calls Regexp#match, so calling match on one
or the other should make no difference. Can you show a small example
of a file that breaks?

Jesus.

 
Reply With Quote
 
 
 
 
m b
Guest
Posts: n/a
 
      06-13-2011



> > if I do this:
> >
> > f=3Dopen('filename.dat'=2C'r')
> > str=3Df.read
> >
> > and then:
> >
> > str.each_line do |line|
> > /ruby/.match(line)
> >
> > ruby prints out variable line and say its a RegexpError
> > 'empty range in character class' as if it interprets line as a Regexp
> > What am I doing wrong? There are a lot of strange characters in variab=

le line=2C
> > maybe that is the issue?

>=20
> I'm not sure about the issue=2C but the usual idiom for this is:
>=20
> File.foreach("filename.dat") do |line|
> line.match(/ruby/)
> end
>=20
> This way:
> - The file handler is automatically closed for you=2C you don't have to
> ensure that you call close on it=2C it's done for you.
> - You only have one line at a time in memory=2C since that seems to be
> your unit of data. If the file is huge it will make a difference in
> the amount of memory you will consume at a time.
>=20
> In any case=2C String#match calls Regexp#match=2C so calling match on one
> or the other should make no difference. Can you show a small example
> of a file that breaks?
>=20
> Jesus.



Aha.. Thats a better way to do it.. File.foreach Thanx.



the string-variable line both starts and and ends with a '/' . Its =
a series of paths from a linux system hd =20

But its a String to be searched and not a Regexp




=

 
Reply With Quote
 
m b
Guest
Posts: n/a
 
      06-13-2011



> > > if I do this:
> > >
> > > f=3Dopen('filename.dat'=2C'r')
> > > str=3Df.read
> > >
> > > and then:
> > >
> > > str.each_line do |line|
> > > /ruby/.match(line)
> > >
> > > ruby prints out variable line and say its a RegexpError
> > > 'empty range in character class' as if it interprets line as a Rege=

xp
> > > What am I doing wrong? There are a lot of strange characters in vari=

able line=2C
> > > maybe that is the issue?


I found out what I was doing the wrong way..

I'm reading the search pattern with readline
and I wrote it -->/ruby/ =20
That didnt make it a Regexp.
Now I found that if I write it -->ruby
and then
pattern=3DRegexp.new(input_str) it works..

/Mix


=

 
Reply With Quote
 
Robert Klemme
Guest
Posts: n/a
 
      06-14-2011
On Mon, Jun 13, 2011 at 10:26 PM, m b <(E-Mail Removed)> wrote:
>
>
>
>> > > if I do this:
>> > >
>> > > f=3Dopen('filename.dat','r')
>> > > str=3Df.read
>> > >
>> > > and then:
>> > >
>> > > str.each_line =A0do |line|
>> > > =A0 =A0/ruby/.match(line)
>> > >
>> > > ruby prints out variable line and say its a RegexpError
>> > > 'empty range in character class' =A0as if it interprets =A0line as a=

Regexp
>> > > What am I doing wrong? =A0There are a lot of strange characters in v=

ariable line,
>> > > maybe that is the issue?


You must have a different regular expression in your test other than
/ruby/ because that is valid:

irb(main):001:0> m =3D /ruby/.match "text"
=3D> nil
irb(main):002:0> m =3D /ruby/.match "ruby"
=3D> #<MatchData "ruby">

> I found out what I was doing the wrong way..
>
> I'm reading the search pattern with =A0readline
> and I wrote it -->/ruby/
> That didnt make it a Regexp.


This is not true. The sequence /ruby/ *is* a valid regular expression.

10:01:30 ~$ ruby19 -e 'p /ruby/'
/ruby/
10:01:38 ~$ ruby19 -e 'p /ruby/.class'
Regexp
10:01:42 ~$

There must be something else going on. Please post your _complete_
code you actually have.

Kind regards

robert


--=20
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
question row filter (more of sql query question) =?Utf-8?B?YW5kcmV3MDA3?= ASP .Net 2 10-06-2005 01:07 PM
Quick Question - Newby Question =?Utf-8?B?UnlhbiBTbWl0aA==?= ASP .Net 4 02-16-2005 11:59 AM
Question on Transcender Question :-) eddiec MCSE 6 05-20-2004 06:59 AM
Question re: features of the 831 router (also a 924 question) Wayne Cisco 0 03-02-2004 07:57 PM
Syntax Question - Novice Question sean ASP .Net 1 10-20-2003 12:18 PM



Advertisments