Regexp.match(line) question

Hi,
I new to Ruby. It’s a lot of fun to learn…

if I do this:

f=open(‘filename.dat’,‘r’)
str=f.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 line,
maybe that is the issue?

On Mon, Jun 13, 2011 at 7:32 PM, m b [email protected] wrote:

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

ruby prints out variable line and say its a RegexpError
This way:
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

But its a String to be searched and not a Regexp

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

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/
That didnt make it a Regexp.
Now I found that if I write it -->ruby
and then
pattern=Regexp.new(input_str) it works…

/Mix

On Mon, Jun 13, 2011 at 10:26 PM, m b [email protected] wrote:

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
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 = /ruby/.match “text”
=> nil
irb(main):002:0> m = /ruby/.match “ruby”
=> #<MatchData “ruby”>

I found out what I was doing the wrong way…

I’m reading the search pattern with readline
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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs