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