Danny wrote:
| Hi Chris,
|
| Yes, I suspect that this happens a lot. I have my own little formatting
| reader that simulates some of the features of C's scanf, for example:
|
| http://hkn.eecs.berkeley.edu/~dyoo/python/scanf/
|
| so I think it's one of those little exercises that everyone ends up
| doing at least once. *grin*
I've always taken a personal pride in (eventually) following the in the
footsteps of those that have gone before me. There is certainly a joy in
rediscovery :-) (There is also a lot to learn from those whose stride is
greater!)
I was able to pretty easily take your sscanf facility and couple it with the
template reader to read Andrzej Kolinski's data. FWIW, here it is:
#####
data = '''1 Polonijna Liga Mistrzow
26 wrzesnia 2005
6 12 6 4 1
0 1 0
Bohossian - Kolinski
1
1.000 9 13 19
2.000 2 4 16
1.000 10 8 17
0.000 8 6 17
Szadkowska - Szczurek
2
0.000 11 16 20
3.000 1 -4 14
3.500 3 -7 13
2.500 10 13 19
and then here is single line
'''.split('\n')
lines = iter(data)
template1 = '''\
_
_
< %*s %*s %d %d %*s> #same sort of format as before, but now an explicit token
identification occurs
_'''
template2 = '''\
<%s %*s %s>Bohossian - Kolinski
_1
< %*s %*s %i %*s> 1.000 9 13 19 # I get around having to worry about the
decimal by using %s
< %*s %*s %i %*s> 2.000 2 4 16
< %*s %*s %i %*s> 1.000 10 8 17
< %*s %*s %i %*s> 0.000 8 6 17'''
if __name__ == '__main__':
def tread(template, lines):
#reading lines using lines of the template to parse them if the
#lines start with "<"
rv = []
try:
for i,li in enumerate(template.splitlines()):
dat = lines.next()
if li.startswith('<'):
fmt = li.split('>')[0][1:] #take everything between the <>
rv.extend(sscanf(dat, fmt))
return rv
except:
#print 'error at line',i
#print 'in template:'
#print template1
return None
print tread(template1, lines)
while True:
vals = tread(template2, lines)
if not vals: break
print vals
######
Hey, Andrzej, it will be interesting to see what you come up with as a
solution. This has been a helpful problem for me :-)
/c
_______________________________________________
Tutor maillist - [email protected]
http://mail.python.org/mailman/listinfo/tutor