Code Parsing

Dear ruby-list /.

I have a text I file where I need to parse out all Table data-text
similar to the one below.

more code

Table MyTable (real a, real b) {

settings="default";
a= 0 {
  max= { 0,0,0,0}
  mix = { 0,0,0,0}
}
b= 1 {
  max= { 0,0,0,0}
  mix = { 0,0,0,0}
}
c= 2 {
  max= { 0,0,0,0}
  mix = { 0,0,0,0}
}
d= 3 {
  max= { 0,0,0,0}
  mix = { 0,0,0,0}
}

}


more code

The table code could have different number of elements (a,b,c,d).
I know one approach would be to count the number of brackets found until
you match your 1st bracket.
I suspect there can be many elegant solutions to this problem , so any
charming idea/solution is very welcomed.

-ronnie bermejo.

On Fri, 25 Apr 2008 10:58:49 -0500, Rodrigo B. wrote:

a= 0 {
}

The table code could have different number of elements (a,b,c,d). I know
one approach would be to count the number of brackets found until you
match your 1st bracket.
I suspect there can be many elegant solutions to this problem , so any
charming idea/solution is very welcomed.

-ronnie bermejo.

Ruby Q. #155 Parsing JSON (Ruby Quiz - Parsing JSON (#155)) dealt
with this. Look there to see whether there are any good ideas there. If
this isn’t JSON, then your best bet may be to learn how to use a CFG
parser.

Ken B. wrote:

On Fri, 25 Apr 2008 10:58:49 -0500, Rodrigo B. wrote:

a= 0 {
}

The table code could have different number of elements (a,b,c,d). I know
one approach would be to count the number of brackets found until you
match your 1st bracket.
I suspect there can be many elegant solutions to this problem , so any
charming idea/solution is very welcomed.

-ronnie bermejo.

Ruby Q. #155 Parsing JSON (Ruby Quiz - Parsing JSON (#155)) dealt
with this. Look there to see whether there are any good ideas there. If
this isn’t JSON, then your best bet may be to learn how to use a CFG
parser.

Thanks for the pointers Ken.
I found strscan …so my 1st implementation is:
require ‘strscan’

table_file = StringScanner.new( File.read(“code”) )
while line = table_file.scan_until(/\w+|\W+/)
table=line
if ( line =~ /Table/ ) and
( /\w+.+(.+)/ =~ line = table_file.scan_until(/{/) )
left_brackets=1
right_brackets=0
table << line
temp=“”
until left_brackets == right_brackets do
temp = table_file.getbyte
case temp
when “}”
right_brackets+=1
when “{”
left_brackets+=1
end
table << temp
end
puts table
puts “*******”
end
end