If /hello/ =~line

Got help with this code earlier its just checking a file for a line

Im really new to ruby ive used java and C before

just wondering what do i put in if i want to use a variable that is
holding the string eg VAR1 = "hello"

File.foreach "file.txt" do |line|
  if /hello/ =~ line
    puts "found it"
    break
  end
end

···

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

You can use string interpolation like you can with double quoted strings.

var1 = "hello"

File.foreach "file.txt" do |line|
if /#{var1}/ =~ line
   puts "found it"
   break
end
end

--Jeremy

···

On 12/6/07, Peter Loftus <loftuz@gmail.com> wrote:

Got help with this code earlier its just checking a file for a line

Im really new to ruby ive used java and C before

just wondering what do i put in if i want to use a variable that is
holding the string eg VAR1 = "hello"

File.foreach "file.txt" do |line|
  if /hello/ =~ line
    puts "found it"
    break
  end
end
--
Posted via http://www.ruby-forum.com/\.

--
http://www.jeremymcanally.com/

My books:
Ruby in Practice

My free Ruby e-book

My blogs:

http://www.rubyinpractice.com/

Peter Loftus wrote:

Got help with this code earlier its just checking a file for a line

Im really new to ruby ive used java and C before

just wondering what do i put in if i want to use a variable that is
holding the string eg VAR1 = "hello"

File.foreach "file.txt" do |line|
  if /hello/ =~ line
    puts "found it"
    break
  end
end

var = "hello"
File.foreach "file.txt" do |line|
  if /#{var}/ =~ line
    puts "found it"
    break
  end
end

Perhaps?

Regards,
Lee

···

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

if /#{var1}/ =~ line

when i enter # thats just comments out the whole line
any reason for using #

Jeremy McAnally wrote:

···

You can use string interpolation like you can with double quoted
strings.

var1 = "hello"

File.foreach "file.txt" do |line|
if /#{var1}/ =~ line
   puts "found it"
   break
end
end

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

Sometimes it's better to cache the /#{var}/ as in this case, new
regexp object is created on each pass through the cycle.
That might hurt the performance a bit. So:

var = "hello"

+ var_re = /#{var}/

File.foreach "file.txt" do |line|

- if /#{var}/ =~ line
+ if var_re =~ line

    puts "found it"
    break
  end
end

(This might apply for 1.8 MRI only, other interpreters might be
different): When the regex literal contains #{}, the object
is created on each pass through the code. In the other case it's
created only once.

Jano

···

On Dec 6, 2007 12:49 PM, Lee Jarvis <ljjarvis@gmail.com> wrote:

Peter Loftus wrote:

if /#{var1}/ =~ line

when i enter # thats just comments out the whole line
any reason for using #

# is not a comment inside a regexp or string

Best regards,

Jari Williamsson

Though your IDE may think you're commenting out the whole line, you're
not. It's the proper way to do string interpolation.

See here: Ruby | zenspider.com | by ryan davis

Or, optionally, the Pickaxe book section on strings.

--Jeremy

···

On 12/6/07, Peter Loftus <loftuz@gmail.com> wrote:

if /#{var1}/ =~ line

when i enter # thats just comments out the whole line
any reason for using #

Jeremy McAnally wrote:
> You can use string interpolation like you can with double quoted
> strings.
>
> var1 = "hello"
>
> File.foreach "file.txt" do |line|
> if /#{var1}/ =~ line
> puts "found it"
> break
> end
> end
>
--
Posted via http://www.ruby-forum.com/\.

--
http://www.jeremymcanally.com/

My books:
Ruby in Practice

My free Ruby e-book

My blogs:

http://www.rubyinpractice.com/

Jano Svitok wrote:

(This might apply for 1.8 MRI only, other interpreters might be
different): When the regex literal contains #{}, the object
is created on each pass through the code. In the other case it's
created only once.

True, you could use the Regexp class also then..

var = 'hello'
revar = Regexp.new(var)

if revar =~ line
  #..
end

or perhaps

var = 'hello'
File.foreach 'file.txt' do |line|
  if Regexp.new(var) =~ line
    puts 'found it'
    break
  end
end

If you don't care how many times its created and you don't want to use
the '#' in your regexp matches because your IDE doesn't know any better.

Regards,
Lee

···

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

You can also use the /o option, which tells Ruby to compile the Regex
only once:

var = "hello"
File.foreach "file.txt" do |line|
  if /#{var}/o =~ line
    puts "found it"
    break
  end
end

···

On Dec 6, 6:38 am, Jano Svitok <jan.svi...@gmail.com> wrote:

On Dec 6, 2007 12:49 PM, Lee Jarvis <ljjar...@gmail.com> wrote:

Sometimes it's better to cache the /#{var}/ as in this case, new
regexp object is created on each pass through the cycle.
That might hurt the performance a bit. So:

> var = "hello"
+ var_re = /#{var}/
> File.foreach "file.txt" do |line|

- if /#{var}/ =~ line
+ if var_re =~ line

> puts "found it"
> break
> end
> end

(This might apply for 1.8 MRI only, other interpreters might be
different): When the regex literal contains #{}, the object
is created on each pass through the code. In the other case it's
created only once.

Jano

Thanks for explaining it

Cheers
Loftz

Jeremy McAnally wrote:

···

Though your IDE may think you're commenting out the whole line, you're
not. It's the proper way to do string interpolation.

See here: Ruby | zenspider.com | by ryan davis

Or, optionally, the Pickaxe book section on strings.

--Jeremy

On 12/6/07, Peter Loftus <loftuz@gmail.com> wrote:

>

--
http://www.jeremymcanally.com/

My books:
Ruby in Practice
Ruby in Practice

My free Ruby e-book
http://www.humblelittlerubybook.com/

My blogs:
http://www.mrneighborly.com/
http://www.rubyinpractice.com/

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

Thanks, I didn't know that... Now I see it even in the first pickaxe
book... I guess I should read it once more :wink:

···

On Dec 6, 2007 4:35 PM, yermej <yermej@gmail.com> wrote:

You can also use the /o option, which tells Ruby to compile the Regex
only once:

var = "hello"
File.foreach "file.txt" do |line|
  if /#{var}/o =~ line

    puts "found it"
    break
  end
end

# And don't miss the very useful Regexp.quote, which makes sure
everything in var is matched literally

revar = Regexp.new(Regexp.quote(var))

martin

···

On Dec 6, 2007 5:17 AM, Lee Jarvis <ljjarvis@gmail.com> wrote:

True, you could use the Regexp class also then..

var = 'hello'
revar = Regexp.new(var)