Найти - Пользователи
Полная версия: Нужна помощь в "допиливании" питон-скрипта коррекции раскладки клавиатуры
Начало » Центр помощи » Нужна помощь в "допиливании" питон-скрипта коррекции раскладки клавиатуры
1
Mulber
Доброго времени суток, ув. форумчане.
вкратце опишу суть: ранее при использовании Delphi 7 (до перехода на Юникод) использовался питон-скрипт по коррекции раскладки клавиатуры (если вводилась кирилица, автоматом переключалось на латиницу), работал корректно. После перехода на Delphi 2007 нижеуказанный скрипт перестал работать. В питоне не силен, посему прошу помощи в доработке скрипта:
def Convert(s):
   eng =u'QWERTYUIOPASDFGHJKLZXCVBNM'     
rus=u'\u0419\u0426\u0423\u041a\u0415\u041d\u0413\u0428\u0429\u0417\u0424\u042b\u0412\u0410\u041f\u0420\u041e\u041b\u0414\u042f\u0427\u0421\u041c\u0418\u0422\u042c'
   s_out =''
   l=len(s)
   i=0
   while i < l :
      j  =  ord(s[i])
      if j > 128 :
         if j < 224 :
            i = i + 1
            j2 = ord(s[i])
            k = (j2%64) + (j %32) * 64
            s2 = unichr(k)           
            try : s_out += eng[rus.index(s2)]
            except : s_out += s[i-1: i]
         else :
            i = i+2
            s_out += s[i-2: i]
      else :
            s_out += s[i]
      i += 1
   return (s_out)

естественно при передаче в функцию юникодной строки имеем символы с кодом > 224

так например передаем кирилическую ‘К’… по отладке имеет код = 1050.
Помогите доработать скрипт, указать на ошибки. Заранее спасибо откликнувшимся!
Piton23
Если правильно понял, то если к примеру пользователь вводит в русской раскладке ‘ы’ вводился символ ‘s’, ‘х’ -> ‘[’, ‘ж’ -> ‘;’ и т.д. т.е. асинхронно? Или ж на входе строка которую надо конвертнуть?

Не проще ли словарь соответсвия ввести?

dictionary = {u'а' : 'f', u'б' : ',', u'в': 'd', ... , u'я' : 'z', u'А' : 'F', ... , u'Я' : 'Z'}
# Для асинхронного способа достаточно проверить в наличие символ
def Convert(c):
    if c in dictionary.keys():
        c = dictionary[c]
    return c
# Для случая конвертированния строки
def Convert(s):
    s = list(s)
    for index, char in enumerate(s):
         if char in dictionary.keys():
             s[index] = dictionary[char]
    return ''.join(s)

PS: немного подредактировал код.

fata1ex
Мне было бы лень вручную заводить словарь.

>>> type(u'й')
<type 'unicode'>
>>> ord(u'б')
1073
>>> unichr(ord(u'б')+1)
u'\u0432'
>>> u'в'
u'\u0432'
Inviz
Сделал для себя,
работает с вышеприведённым кодом

dictionary = {u'q':'й', u'w':'ц', u'e':'у', u'r':'к', u't':'е', u'y':'н', u'u':'г', u'i':'ш', u'o':'щ', u'p':'з', u'[':'х', u']':'ъ', u'a':'ф', u's':'ы', u'd':'в', u'f':'а', u'g':'п', u'h':'р', u'j':'о', u'k':'л', u'l':'д', u';':'ж', u'z':'я', u'x':'ч', u'c':'с', u'v':'м', u'b':'и', u'n':'т', u'm':'ь', u',':'б', u'.':'ю', u'/':'.', u'Q':'Й', u'W':'Ц', u'E':'У', u'R':'К', u'T':'Е', u'Y':'Н', u'U':'Г', u'I':'Ш', u'O':'Щ', u'P':'З', u'{':'Х', u'}':'Ъ', u'A':'Ф', u'S':'Ы', u'D':'В', u'F':'А', u'G':'П', u'H':'Р', u'J':'О', u'K':'Л', u'L':'Д', u':':'Ж', u'"':'Э', u'Z':'Я', u'X':'Ч', u'C':'С', u'V':'М', u'B':'И', u'N':'Т', u'M':'Ь', u'<':'Б', u'>':'Ю', u'\'':'э', u'`':'ё'}

И ещё автоловилка этого безобразия (использую в скайпе)
txts = {'fuf','ghbdtn','ns','jr','nzr','crh','dj','rfr','lf','ytn','gjrf','yt','tot','nen','[t','tnj','xbn','xtn','jyb','tcnm','xt','[s','ghjdthrf','plfhjdf','[fq','[fb','[p','yjhvfkmyj','bjn','vyt','rj','nen','eue','uf','cfv','nfr','xnj','vyt','rjn','njr','rf','rjy','gjyznyj','rhenf','cjcb','[eq','gbljh','ufyljy','dct','yf','cdz','kf;','ghj','rju','pf','cks','gjr','jik','nfr','gjxtve','ehf','kjk','kfvj','k.lb','yfhjl','rfdj','tcnm','tot','hfp','ldf'}
.....
            for index, char in enumerate(txts):
                if text(char):
                    result = Convert(msg.Body)
                    msg.Chat.SendMessage("Имел ввиду: "+ result )
                    return
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB