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
--
Posted via http://www.ruby-forum.com/.

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

regex2=/^[0-1]{1},[a-zA-Z]{1,25}$/

=> /^[0-1]{1},[a-zA-Z]{1,25}$/

regex2.match "1,abcd"

=> #<MatchData "1,abcd">

or '.?'

regex3=/^[0-1]{1}.?[a-zA-Z]{1,25}$/

=> /^[0-1]{1}.?[a-zA-Z]{1,25}$/

regex3.match "1,abcd"

=> #<MatchData "1,abcd">

hth. regards, Sandor Szücs

···

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

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

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

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

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

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:

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

you want:

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

···

On 15.07.2008, at 05:07, Jay Jkb wrote:
--
P.S. sorry for my missinterpretation of your problem on my first answer.