The Regular exp read from file not matching!

I am trying to read the syntax(here the regular expression) frpm a file.

When I use /^[0-1]{1}$/ with “1” as subject it works but
/^[0-1]{1}[a-zA-Z]{1,25}$/ syntax for “1,abcd” , I have checked out on
the interpreter directly both works fine. I suppose I am messing up
something with the files, or gets or chomp or …

Any help ?

 def sanity_check(param)
      filename = create_filename("Syntax",param) #this fn gets a

valid file name
if File.exist?(filename)
File.open(filename,“r+”) do |syntaxfile|
syntax = syntaxfile.gets.chomp
return syntax.match(@newsettings.value)
end
end
return true # RETURN TRUE IF SYNTAX FILE NOT FOUND
end

==============================================================================

setprm_0.1.2.rb:149: return value
(rdb:1) v l
filename => “C:\rubypgm\Paramsyntax\prm.102”
param => “102”
syntax => “/^[0-1]{1}[a-zA-Z]{1,25}$/”
value => nil
(rdb:1) n
setprm_0.1.2.rb:85: update_status(("\n Incorrect syntax ,
File not up

On 14.07.2008, at 09:38, Jayan Jacob wrote:

When I use /^[0-1]{1}$/ with “1” as subject it works but
/^[0-1]{1}[a-zA-Z]{1,25}$/ syntax for “1,abcd” , I have checked out on
the interpreter directly both works fine. I suppose I am messing up
something with the files, or gets or chomp or …

Any help ?

That RegEx: /^[0-1]{1}[a-zA-Z]{1,25}$/ doesn’t match ‘,’.

maybe: add ‘,’
irb> regex2=/^[0-1]{1},[a-zA-Z]{1,25}$/
=> /^[0-1]{1},[a-zA-Z]{1,25}$/
irb> regex2.match “1,abcd”
=> #<MatchData “1,abcd”>

or ‘.?’
irb> regex3=/^[0-1]{1}.?[a-zA-Z]{1,25}$/
=> /^[0-1]{1}.?[a-zA-Z]{1,25}$/
irb> regex3.match “1,abcd”
=> #<MatchData “1,abcd”>

hth. regards, Sandor
Szücs

Sorry for the typo error in the earlier mail , I did try “1abcd” on
/^[0-1]{1}[a-zA-Z]{1,25}$/. I am putting a regular expression in a file
and my program picks up this string to do a match with the input an
string ==> “syntax.match(@newsettings.value)”

here is the debug info for more clarity

(rdb:1) n
setprm_0.1.2.rb:149: return value
(rdb:1) v l
filename => “C:\rubypgm\Paramsyntax\prm.102”
newsettings => “1abcd”
param => “102”
syntax => “/^[0-1]{1}[a-zA-Z]{1,25}$/”
syntaxfile => #<File:C:\rubypgm\Paramsyntax\prm.102>
value => nil
(rdb:1) l
[144, 153] in setprm_0.1.2.rb
144 if File.exist?(filename)
145 File.open(filename,“r+”) do |syntaxfile|
146 syntax = syntaxfile.gets.chomp
147 newsettings = @newsettings.value
148 value = syntax.match(newsettings)
=> 149 return value
150 end
151 end
152 return true # RETURN TRUE IF SYNTAX FILE NOT
FOUND
153 end

thanks
jn

Jay Jkb wrote:

I am trying to read the syntax(here the regular expression) frpm a file.

When I use /^[0-1]{1}$/ with “1” as subject it works but
/^[0-1]{1}[a-zA-Z]{1,25}$/ syntax for “1,abcd” , I have checked out on
the interpreter directly both works fine. I suppose I am messing up
something with the files, or gets or chomp or …

Any help ?

 def sanity_check(param)
      filename = create_filename("Syntax",param) #this fn gets a

valid file name
if File.exist?(filename)
File.open(filename,“r+”) do |syntaxfile|
syntax = syntaxfile.gets.chomp
return syntax.match(@newsettings.value)
end
end
return true # RETURN TRUE IF SYNTAX FILE NOT FOUND
end

==============================================================================

setprm_0.1.2.rb:149: return value
(rdb:1) v l
filename => “C:\rubypgm\Paramsyntax\prm.102”
param => “102”
syntax => “/^[0-1]{1}[a-zA-Z]{1,25}$/”
value => nil
(rdb:1) n
setprm_0.1.2.rb:85: update_status(("\n Incorrect syntax ,
File not up

I replaced the code with
return /#{syntaxfile.gets.chomp}/.match(@newsettings.value)
and it worked. for some reason when i assign it to the variable syntax
and then use it id does not work …

some explanation on why? , would be great .

thanx
Jn

Jay Jkb wrote:

I am trying to read the syntax(here the regular expression) frpm a file.

When I use /^[0-1]{1}$/ with “1” as subject it works but
/^[0-1]{1}[a-zA-Z]{1,25}$/ syntax for “1,abcd” , I have checked out on
the interpreter directly both works fine. I suppose I am messing up
something with the files, or gets or chomp or …

Any help ?

 def sanity_check(param)
      filename = create_filename("Syntax",param) #this fn gets a

valid file name
if File.exist?(filename)
File.open(filename,“r+”) do |syntaxfile|
syntax = syntaxfile.gets.chomp
return syntax.match(@newsettings.value)
end
end
return true # RETURN TRUE IF SYNTAX FILE NOT FOUND
end

==============================================================================

setprm_0.1.2.rb:149: return value
(rdb:1) v l
filename => “C:\rubypgm\Paramsyntax\prm.102”
param => “102”
syntax => “/^[0-1]{1}[a-zA-Z]{1,25}$/”
value => nil
(rdb:1) n
setprm_0.1.2.rb:85: update_status(("\n Incorrect syntax ,
File not up

On 15.07.2008, at 05:07, Jay Jkb wrote:

some explanation on why? , would be great .

In my opinion it’s a String vs. RegExp problem.

Your rdebug output said that your syntax variable was a String, or?:

(rdb:1) v l
filename => “C:\rubypgm\Paramsyntax\prm.102”
newsettings => “1abcd”
param => “102”
syntax => “/^[0-1]{1}[a-zA-Z]{1,25}$/”

syntax has doublequotes and is a String here (maybe a hint or just
output?).

However if you read from file you get a String not an Regexp you want to
have a new Regexp so you have to use Regexp.new or /“string”/.

In a test the String don’t match like a Regexp:

irb> syntax="/^[0-1]{1}[a-zA-Z]{1,25}$/"
irb> newsettings=“1abcd”
irb> syntax.match(newsettings) => nil
irb> syntax2=/^[0-1]{1}[a-zA-Z]{1,25}$/
irb> syntax2.match(newsettings) => #<MatchData “1abcd”>

you want:
irb> Regexp.new("/^[0-1]{1}[a-zA-Z]{1,25}$/") => //^[0-1]{1}[a-zA-Z]
{1,25}$//

or what you did:

/#{syntaxfile.gets.chomp}/.match(@newsettings.value)

It’s a Regexp so it works as expected.

hth. regards, Sandor
Szücs