Hi All,
I dont know how to use a variable in a regex searchstring.
ruby seems to only handle hardcoded serachstring in
regex’s. How do you do this. My code is below.
Also - how do you put a variable name in a
File.open(“filename.txt”) statement like this:
File.open(filevariable) where filevariable can
be set to anything? I could not find this in
the docs.
Thanks, --Joe
================ snip code ===============
#!/usr/bin/ruby
F = “filename.txt”
searchstring = ARGV[0]
print "searchstring is ", searchstring, “\n”
File.open(“filename.txt”).each { |line|
this fails puts line if line =~ searchstring
this fails puts line if line =~ /searchstring/
this fails puts line if line =~ “searchstring”
#this works
puts line
}
I dont know how to use a variable in a regex searchstring.
ruby seems to only handle hardcoded serachstring in
regex’s. How do you do this. My code is below.
Does this help?
str = “abcdef”
searchstring = “cd”
p str =~ /#{searchstring}/
Harry
On Jan 29, 10:38 pm, Harry K. [email protected] wrote:
I dont know how to use a variable in a regex searchstring.
ruby seems to only handle hardcoded serachstring in
regex’s. How do you do this. My code is below.
Does this help?
str = “abcdef”
searchstring = “cd”
p str =~ /#{searchstring}/
You may need to escape:
p str =~ /#{Regexp.escape(searchstring)}/
Thomas S. wrote:
On Jan 29, 10:38�pm, Harry K. [email protected] wrote:
I dont know how to use a variable in a regex searchstring.
ruby seems to only handle hardcoded serachstring in
regex’s. � How do you do this. � My code is below.
Does this help?
str = “abcdef”
searchstring = “cd”
p str =~ /#{searchstring}/
You may need to escape:
p str =~ /#{Regexp.escape(searchstring)}/
But note that #{} only makes sense if you’re interpolating a variable
into part of a regex – say, /January #{year}/. If the variable is the
whole regex, then it’s more sensible to do Regex.new(searchstring).
Best,
Marnen Laibow-Koser
http://www.marnen.org
[email protected]
On Fri, Jan 29, 2010 at 6:50 PM, joemac [email protected]
wrote:
the docs.
File.open(“filename.txt”).each { |line|
this fails puts line if line =~ searchstring
this fails puts line if line =~ /searchstring/
this fails puts line if line =~ “searchstring”
#this works
puts line
}
This should work, here is an image showing how to use it:
filename = ‘source.txt’
to_find = Regexp.new ARGV[0]
puts “The Regexp is: #{to_find.inspect}”
File.open(filename).each do |line|
if line =~ to_find
puts “This line matches: #{line}”
puts “This is what matches: #{line[to_find]}”
end
end
On Jan 29, 7:38 pm, Harry K. [email protected] wrote:
Harry
Hi Folks,
Thanks for all the helpful info.
It was the #{} syntax that i was missing.
This also works for the “filename as a varible” situation
when parsing lots of files:
filenames = [“input1”, “input2”, “input3”]
for fname in filenames
infile = File.open(“#{fname}”)
while line = infile.gets()
puts line
end
puts “================== end file ===================”
end
Very helpfull!
Thanks, --JM
Josh C. wrote:
File.open(filename).each do |line|
if line =~ to_find
puts “This line matches: #{line}”
puts “This is what matches: #{line[to_find]}”
or to avoid having to match it twice:
puts “This is what matches: #{$&}”
Also:
puts “This is what came before: #{$`}”
puts “This is what came after: #{$’}”
puts “Capture 1 is #{$1}”
etc
On Feb 22, 2010, at 1:45 PM, joemac wrote:
Thanks, --JM
In this case, you’re already getting strings in fname so “#{fname}”
isn’t really doing anything useful.
-Rob
Rob B. http://agileconsultingllc.com
[email protected]
In this case, you’re already getting strings in fname so “#{fname}” isn’t
really doing anything useful.
Which means File.open(fname) would work directly.
Cheers,