Replace

Anthra Norell anthra.norell at tiscalinet.ch
Fri May 12 18:21:57 CEST 2006


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" <elw000 at verizonz.net>
Newsgroups: comp.lang.python
To: <python-list at 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
> ><wlfraed at ix.netcom.com> 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




More information about the Python-list mailing list