need simple parsing ability
Scott David Daniels
Scott.Daniels at Acm.Org
Fri Jul 16 17:26:30 EDT 2004
george young wrote:
...
> Mmm, not quite. If ns=='foo08-11', your fs==[foo8, foo9, foo10, foo11]
> which is wrong. It should yield fs==[foo08, foo09, foo10, foo11].
> I.e., it must maintain leading zeros in ranges.
>>>>
>>>>Can anyone suggest a clean way of doing this? I don't mind
>>>>installing and importing some parsing package, as long as my code
>>>>using it is clear and simple. Performance is not an issue.
>>>>
>>>>
>>>>-- George Young
Here's a $50 solution. Using the code below, you can do:
mywafers = allwafers('q9-43, s12, a11-23')
Then you can use tests like:
if 'wafer23' in mywafers:
...
---
import sets
def elements(wafers):
'''get wafer names from wafer-names and wafer-name-ranges'''
for element in wafers:
if '-' not in element:
yield element # simple name
continue
# name with range
start, final = element.split('-')
preamble = start.rstrip('0123456789') # header
initial = start[len(preamble):]
if len(final) == len(initial) or initial.startswith('0'):
# use fixed length strings.
assert len(initial) >= len(final) # eg: foo01-009
pattern = preamble + '%0' + str(len(initial)) + 'd'
else:
# unequal length: should be foo08-09, not foo008-9
assert not (final.startswith('0') or initial.startswith('0'))
pattern = preamble + '%d'
for number in range(int(initial), int(final)+1):
yield pattern % number
def allwafers(spec):
return sets.Set(elements([element.strip()
for element in spec.split(',')]))
if __name__ == '__main__':
ns = ('9,foo7-9,2-4,xxx,5, 6, 7, 8, 9, bar, foo_6, foo_10,'
' foo_11, q08-12')
nr = ('9 foo7 foo8 foo9 2 3 4 xxx 5 6 7 8 9 bar foo_6 foo_10 '
' foo_11 q08 q09 q10 q11 q12').split()
assert sets.Set(nr) == allwafers(ns)
--
-Scott David Daniels
Scott.Daniels at Acm.Org
More information about the Python-list
mailing list