Pyparsing...
Raoul
raoulsam at yahoo.com
Mon Sep 20 20:39:24 EDT 2004
I am futzing with pyparsing and for the most part enjoying it.
However, I'm running into trouble with whitespace delimited lists. I
get data in blocks like this:
[QC1]
Type=15
NumberCells=1925
CellHeader=X Y PROBE PLEN ATOM INDEX
Cell1=132 0 N 25 0 132
Cell2=652 0 N 25 0 652
Cell3=648 0 N 25 0 648
...
I'd like to be able to parse this structure.
Ideally, I'd like for a QC node, to have a dictionary with
{'number':1
'type' : 15
'NumberCells' : 1925
'Table' : [{'cell':1,'x':132,'y':0,'probe':25,'plen':0,'atom':132',
'index':None}, {'cell':2 ....
I'm running into the following problems:
1. I can't seem to use delimitList() to define a rule that parses the
right hand side of the table into
['x','y','probe','plen','atom','index']. I think it's because my lists
are whitespace delimited.
2. I can't seem to convert value into an integer, for example, I can
parse each row in the table to :
['Cell','2','=', '652 0 N 25 0 652']
but am unable to get the setParseAction(see below) to convert and
substitute in the right value.
Any hints will help a great deal. Thanks...
Raoul-Sam
I have some ugly non functional code below..
def cdffile_BNF():
global cdfbnf
if not cdfbnf:
makeint = Word(nums).setParseAction( lambda s,l,t:[int(t[0])])
equals = Literal("=").suppress()
nonequals = "".join( [ c for c in printables if c != "=" ] ) +
" \t"
key = Word(nonequals)
value = Word(nonequals)
kvp = Group(key + equals + restOfLine)
kvpBlk = OneOrMore(kvp)
headerCell = delimitedList(Word(alphanums)," ")
rowHeader = Combine( Literal("CellHeader") + equals +
headerCell)
row = Combine(Literal("Cell").suppress() + restOfLine)
rows = OneOrMore(row)
CDF = Literal("[CDF]")
CDFBlk = Group(CDF + kvpBlk)
CHIP = Literal("[CHIP]")
CHIPBlk = Group(CHIP + kvpBlk)
CHIPBlk.setResultsName("chip")
QC = Combine( Literal("[QC").suppress() + Word(nums) +
Literal("]").suppress())
QCBlk = QC + kvp + kvp + rowHeader + rows
cdfbnf = CDFBlk + CHIPBlk + QCBlk
return cdfbnf
More information about the Python-list
mailing list