🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.python
Article #28181

Re: Konwersja "\t" do char

#28181
From: Jordan Szubert
Date: Sat, 23 Jul 2011 19:31
61 lines
2896 bytes
Dnia 23-07-2011 o 20:57:51 Michal Wawrzyniuk <mwawrzyn07@gazeta.pl>  
napisał(a):

>>>
>>
>> określ dokładniej co chcesz, podaj więcej przykładów, nie tylko
>> legalnych (np. co jak użytkownik poda "dupa")
>>
>
> Jak zrobic to inaczej to wiem nie ma problemow. Tylko chodzi mi o  
> konwersje znaku 'escape' \t zakodowanego w stringu czyli dwa znaki do  
> jedengo zanku char '\t' metoda z substring dziala tylko chodzi mi o  
> ogolne rozwiaznie dla jakiegokolwiek znaku escape np. \t, \n, \r
>
>
> czyli: uzytkownik podaje jeden ze znakow \t, \n, \r
>
>   Teraz jak zmodyfikowac string2 zeby  string1=string2 metoda z replace  
> dziala ale w tym przypadku musielibysmy znac ktory to jest znak  
> specjalny czy sie nie zrobic jakies ogolnej konwersji z '\\?' ---> '\?'

istnieje funkcja eval, ale to bardzo rzadko jest właściwe rozwiązanie, a i  
tak należałoby ją jakoś opakować...


albo coś w tę stronę:
def UserInputToChar(s:str)->str:
	"""konwertuje ,,opis'' znaku do znaku

	interpretuje znaki specjalne jak Python3, z wyjątkiem \N
	pisane w kliencie news, nie testowane
	"""
	if not (isinstance(s,str) and s):
		raise Exception("input must be non-empty string")
	if s[0]!='\\':
		if len(s)==1:
			return s
		else:
			raise Exception("multiple characters not allowed")
	else:
		spc="\n\t\r\v\f\b\a\\\'\""
		spc={repr(c)[2]:c for c in spc}
		dts='0123456789abcdefABCDEF'
		if len(s)==2 and s[1] in spc:
			return spc[s[1]]
		elif len(s)==4 and s[1]=='x' and set(dts).issuperset(s[2:]):
			# \xhh
			return chr(int(s[2:],16)
		elif len(s) in {2,3,4} and set(dts[:8]).issuperset(s[1:])
			# \ooo \oo \o
			return chr(int(s[1:],8)
		elif len(s)==6 and s[1]=='u' and set(dts).issuperset(s[2:]):
			# \uXXXX
			return chr(int(s[2:],16)
		elif len(s)==10 and s[1]=='U' and set(dts).issuperset(s[2:]):
			# \UXXXXXXXX
			return chr(int(s[2:],16)
	
	raise Exception("unparseable input",s)
-- 
Jordan Szubert
Technical Details
Message-ID: <op.vy266glnhilul8@asus7.home>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
References: <j0covf$ae$1@inews.gazeta.pl> <20110723113522.0ef604c1.gryf_esm-no@spam-o2.pl> <j0ebli$4bd$1@inews.gazeta.pl> <op.vy2yoyofhilul8@asus7.home> <j0f5jh$ija$1@inews.gazeta.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
Newsgroups: pl.comp.lang.python
Subject: Re: Konwersja "\t" do char
References: <j0covf$ae$1@inews.gazeta.pl> <20110723113522.0ef604c1.gryf_esm-no@spam-o2.pl> <j0ebli$4bd$1@inews.gazeta.pl> <op.vy2yoyofhilul8@asus7.home> <j0f5jh$ija$1@inews.gazeta.pl>
Date: Sat, 23 Jul 2011 21:31:18 +0200
MIME-Version: 1.0
From: "Jordan Szubert" <usenet@joru.us.to>
Organization: HELL inc.
Message-ID: <op.vy266glnhilul8@asus7.home>
User-Agent: Opera Mail/11.50 (Win32)
Lines: 75
NNTP-Posting-Host: 83.26.229.253
X-Trace: 1311449483 unt-rea-a-02.news.neostrada.pl 2505 83.26.229.253:36240
X-Complaints-To: abuse@news.neostrada.pl
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit