On Aug 15, 7:12 am, John Machin <[EMAIL PROTECTED]> wrote:
> On Aug 15, 4:55 am, [EMAIL PROTECTED] wrote:
>
> > #your thought is right.
> > =======================================================
> > def sizes2fields(sizes):
> > d = []
> > begin = 0
> > for i in sizes:
> > if begin:
> > end = begin + i
> > else: end = i
> > d.append((begin, end))
> > begin += i
> > return tuple(d)
>
> Those who are not paid by the keystroke and/or prefer to expend
> keystrokes on meaningful names might like an alternative like this:
> def sizes2offsets(sizes):
> offsets = []
> begin = 0
> for size in sizes:
> end = begin + size
> offsets.append((begin, end))
> begin = end
> return offsets
This is even shorter: (and IMHO, clearer)
def split(s, fields):
ret = []
for field in fields:
s, d = s[field:], s[:field]
ret.append(d)
return ret
sizes = [16, 4, 8, 8, 8]
s = '123456789012345678901234567890123456789012345678901234567890'
print split(s, sizes)
alternatively, if what you've got is the partition position instead of
field width:
def split(s, sizes):
ret = []
start = sizes[0]
for end in sizes[1:]:
r, start = s[start: end], end
ret.append(r)
return ret
sizes = [0, 16, 20, 28, 36, 44]
s = '123456789012345678901234567890123456789012345678901234567890'
print split(s, sizes)
Michael Stroder:
> If the input data has to be pre-processed before storing it into the
> database a Python script would be needed.
But not for converting the fixed length string, you could just have
SQL process the fixed length string then retrieve it back as separate
fields.
--
http://mail.python.org/mailman/listinfo/python-list