[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

the Regular exp read from file not matching !!

Jayan Jacob

7/14/2008 7:38:00 AM

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

4 Answers

Sandor Szücs

7/14/2008 12:14:00 PM

0


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=3D/^[0-1]{1},[a-zA-Z]{1,25}$/
=3D> /^[0-1]{1},[a-zA-Z]{1,25}$/
irb> regex2.match "1,abcd"
=3D> #<MatchData "1,abcd">

or '.?'
irb> regex3=3D/^[0-1]{1}.?[a-zA-Z]{1,25}$/
=3D> /^[0-1]{1}.?[a-zA-Z]{1,25}$/
irb> regex3.match "1,abcd"
=3D> #<MatchData "1,abcd">

hth. regards, Sandor Sz=FCcs
--=

Jayan Jacob

7/15/2008 2:13:00 AM

0

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

Jayan Jacob

7/15/2008 3:07:00 AM

0

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

Sandor Szücs

7/15/2008 9:50:00 AM

0

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 =3D> "C:\\rubypgm\\Paramsyntax\\prm.102"
> newsettings =3D> "1abcd"
> param =3D> "102"
> syntax =3D> "/^[0-1]{1}[a-zA-Z]{1,25}$/"

syntax has doublequotes and is a String here (maybe a hint or just =20
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=3D"/^[0-1]{1}[a-zA-Z]{1,25}$/"
irb> newsettings=3D"1abcd"
irb> syntax.match(newsettings) =3D> nil
irb> syntax2=3D/^[0-1]{1}[a-zA-Z]{1,25}$/
irb> syntax2.match(newsettings) =3D> #<MatchData "1abcd">

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

{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=FCcs
--
P.S. sorry for my missinterpretation of your problem on my first answer.=