Code Parsing

R

Rodrigo Bermejo

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

Ken Bloom

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.

Ruby Quiz #155 Parsing JSON (http://www.rubyquiz.com/quiz155.html) 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.
 
R

Rodrigo Bermejo

Ken said:
Ruby Quiz #155 Parsing JSON (http://www.rubyquiz.com/quiz155.html) 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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,206
Messages
2,571,070
Members
47,676
Latest member
scazeho

Latest Threads

Top