se = SE.SE (r' "~=.~=\=#') >>> se ('tyrtrbd =ffgtyuf == =tyryr =u=p ttttff') 'tyrtrbd =#fgtyuf =# =#yryr =#=# ttttff'
I am in the final stages of documenting my stream editor SE. There are quite a few problems raised on this list which SE would handle elegantly. Where do I propose it for distribution? Frederic ----- Original Message ----- From: "Eric" <[EMAIL PROTECTED]> Newsgroups: comp.lang.python To: <python-list@python.org> Sent: Sunday, May 07, 2006 1:35 AM Subject: Re: Replace > On 2006-05-06, Dennis Lee Bieber wrote: > > On Sat, 06 May 2006 19:55:35 GMT, Dennis Lee Bieber > ><[EMAIL PROTECTED]> declaimed the following in comp.lang.python: > > > > > >> splits = encData.split("#", 1) > > > > Whoops.... # => = > > > > Since there are only what, five, escaped characters, the use of a > > translate table seems somewhat overkill... A simple dictionary can be > > used... > > > > # pseudo-yENC decoder > > # ignores all of the protocol except for the > > # data portion decode > > > > d42 = "".join([chr((x - 42) % 256) for x in range(256)]) > > d64 = { "@" : "\0", > > "I" : "\t", > > "J" : "\n", > > "M" : "\r", > > "}" : "=" } > > e42 = "".join([chr((x + 42) % 256) for x in range(256)]) > > e64 = { "\0" : "=@", > > "\t" : "=I", > > "\n" : "=J", > > "\r" : "=M", > > "=" : "=}" } > > > > def decode(encData): > > segments = [] > > while True: > > splits = encData.split("=", 1) > > segments.append(splits[0]) > > if len(splits) == 1: break > > segments.append(d64[splits[1][0]]) > > encData = splits[1][1:] > > > > decData = "".join(segments).translate(d42) > > return decData > > > > def encode(decData): > > segments = [] > > encData = decData.translate(e42) > > while encData: > > pos = len(encData) > > > > nl = encData.find("\0") > > tb = encData.find("\t") > > lf = encData.find("\n") > > cr = encData.find("\r") > > eq = encData.find("=") > > > > if nl != -1: > > pos = min(pos, nl) > > if tb != -1: > > pos = min(pos, tb) > > if lf != -1: > > pos = min(pos, lf) > > if cr != -1: > > pos = min(pos, cr) > > if eq != -1: > > pos = min(pos, eq) > > > > segments.append(encData[:pos]) > > > > if pos < len(encData): > > segments.append(e64[encData[pos]]) > > encData = encData[pos+1:] > > > > return "".join(segments) > > > > > > if __name__ == "__main__": > > junk = """This is not > > the end of the silliness > > being inflicted upon the world of 183743ljf8734jflu807ur32""" > > > > morejunk = encode(junk) > > print morejunk > > > > print decode(morejunk) > > print > > > > tbl = "".join([chr(x) for x in range(256)]) > > > > print repr(tbl) > > print > > yetmore = encode(tbl) > > print repr(yetmore) > > print > > print repr(decode(yetmore)) > > I think you right about the d64 translation thing, it does seem like overkill. > I've been playin with sting.split(), came up with... > > def decode(encData): > segments = [] > splits = encData.split("=") > for i in range(len(splits)): > if i == 0: > segments.append(splits[0].translate(d42)) > else: > segments.append(splits[i][0].translate(d64) + splits[i][1:].translate(d42 > )) > > decoded = ''.join(segments) > return decoded > > string.split might be the way to go, this function almost decodes the test file > from the ydec site correctly. > -- > http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list