Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Henesi609
6 / 6 / 11
Регистрация: 18.10.2012
Сообщений: 61
1

Замена кириллицы на транслит

20.10.2013, 23:21. Просмотров 2254. Ответов 21

Задача такая:
В текстовое окно вводиться кириллица и автоматически переводит в транслит.
Если была введена допустим ш то в транслите sh и если нажать BackSpace то она должна удалить две буквы sh.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2013, 23:21
Ответы с готовыми решениями:

Перевод из кириллицы в транслит
Кто нить, подкиньте толковый пример перевода строки из кириллицы в транслит. Заранее благодарен...

транслит с кириллицы на латиницу
Нужна прога для транслита с кириллицы на латиницу на питоне. То есть вводим определенное слово и...

Транслит (перекодировка с кириллицы на латиницу)
Ребята, здравствуйте, у меня задание: написать на языке ассемблер com-программу, чтобы...

Перевод слова из кириллицы в транслит
нужна функция перевода слова из кириллицы в транслит

Копипаст кириллицы, транслит и тэдэ...
Довелось мне на одном форуме порасспрашивать коллег про мои проблемы с копипастом кириллицы из...

21
The trick
Модератор
7781 / 2792 / 776
Регистрация: 22.02.2013
Сообщений: 3,940
Записей в блоге: 77
20.10.2013, 23:29 2
Храни оригинал и при удалении удаляй сначала из хранилища, а затем из поля
0
Henesi609
6 / 6 / 11
Регистрация: 18.10.2012
Сообщений: 61
23.10.2013, 01:49  [ТС] 3
Цитата Сообщение от The trick Посмотреть сообщение
Храни оригинал и при удалении удаляй сначала из хранилища, а затем из поля
помоги на примере данного кода
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
Public Function CheckInput(AsciiKod As Integer) As String
Select Case AsciiKod
    Case 224
        AsciiKod = 97
    Case 225
        AsciiKod = 98
    Case 226
        AsciiKod = 119
    Case 227
        AsciiKod = 103
    Case 228
        AsciiKod = 100
    Case 229
        AsciiKod = 101
    'Case 230                   ж
        'AsciiKod = 114
    'Case 231                   з
        'AsciiKod =
    Case 232
        AsciiKod = 105
    Case 233
        AsciiKod = 106
    Case 234
        AsciiKod = 107
    Case 235
        AsciiKod = 108
    Case 236
        AsciiKod = 109
    Case 237
        AsciiKod = 110
    Case 238
        AsciiKod = 111
    Case 239
        AsciiKod = 112
    Case 240
        AsciiKod = 114
    Case 241
        AsciiKod = 115
    Case 242
        AsciiKod = 116
    Case 243
        AsciiKod = 117
    Case 244
        AsciiKod = 102
    Case 245
        AsciiKod = 104
    Case 246
        AsciiKod = 99
    'Case 247                   ч
        'AsciiKod =
    'Case 248                   ш
        'AsciiKod =
    'Case 249                   щ
        'AsciiKod =
    'Case 250                   ъ
        'AsciiKod =
    'Case 251                   ы
        'AsciiKod =
    Case 252
        AsciiKod = 39
    'Case 253                   э
        'AsciiKod =
    'Case 254                   ю
        'AsciiKod =
    'Case 255                   я
        'AsciiKod =
    Case 192
        AsciiKod = 65
    Case 193
        AsciiKod = 66
    Case 194
        AsciiKod = 87
    Case 195
        AsciiKod = 71
    Case 196
        AsciiKod = 68
    Case 197
        AsciiKod = 69
    'Case 198                   Ж
        'AsciiKod =
    'Case 199                   З
        'AsciiKod =
    Case 200
        AsciiKod = 73
    Case 201
        AsciiKod = 73
    Case 202
        AsciiKod = 75
    Case 203
        AsciiKod = 76
    Case 204
        AsciiKod = 77
    Case 205
        AsciiKod = 78
    Case 206
        AsciiKod = 79
    Case 207
        AsciiKod = 80
    Case 208
        AsciiKod = 82
    Case 209
        AsciiKod = 83
    Case 210
        AsciiKod = 84
    Case 211
        AsciiKod = 85
    Case 212
        AsciiKod = 70
    Case 213
        AsciiKod = 72
    Case 214
        AsciiKod = 67
    'Case 215                   Ч
        'AsciiKod =
    'Case 216                   Ш
        'AsciiKod =
    'Case 217                   Щ
        'AsciiKod =
    'Case 218                   Ъ
        'AsciiKod =
    'Case 219                   Ы
        'AsciiKod =
    Case 220
        AsciiKod = 39
    'Case 221                   Э
        'AsciiKod =
    'Case 222                   Ю
        'AsciiKod =
    'Case 223                   Я
        'AsciiKod =
    Case Else
End Select
CheckInput = AsciiKod
End Function
 
Private Sub txtTranslite_KeyPress(KeyAscii As Integer)
KeyAscii = CheckInput(KeyAscii)
End Sub
0
JoraVoenyjHaker
Заблокирован
23.10.2013, 02:30 4
В чем вопрос ?
в удалении двух символах при нажатии одного ?

Там надо посылать SendKeys

Пример 2 удаления:
Visual Basic
1
2
    SendKeys "{BS}", True
    SendKeys "{BS}", True
Ты какбы нажал 2 раза BackSpace програмно
True это ожидание реакции...

если бы ты знал утилиту Punto то вообще не пришлось бы задумываться над этим )))

а вместо Select case
можно сделать более простые сопоставления.....

на форме 1 закинь кнопку 1 и текстбокс 1
Модуль формы:
Visual Basic
1
2
3
4
Private Sub Command1_Click()
    Text1.SetFocus
    SendKeys "{BS}", True
End Sub
пример вставки Sh
Visual Basic
1
2
3
4
Private Sub Command1_Click()
    Text1.SetFocus
    SendKeys "Sh", True
End Sub
1
23.10.2013, 02:30
Henesi609
6 / 6 / 11
Регистрация: 18.10.2012
Сообщений: 61
23.10.2013, 23:31  [ТС] 5
JoraVoenyjHaker, проблема в том что у меня не выводятся две буквы при нажатии одного и незнаю как сделать удаление 2 символов нажатием одного
0
The trick
Модератор
7781 / 2792 / 776
Регистрация: 22.02.2013
Сообщений: 3,940
Записей в блоге: 77
23.10.2013, 23:34 6
Цитата Сообщение от Henesi609 Посмотреть сообщение
незнаю как сделать удаление 2 символов нажатием одного
Тебе я написал как.
Хранить оригинал надо полюбому, иначе как разобрать что sh - Это Ш или СХ
0
JoraVoenyjHaker
Заблокирован
24.10.2013, 00:08 7
Ну вот
в своём Select case
и сделай обработку нажатия одной клавиши
используя SendKeys вызвав две
и наоборот, прояви фантазию )))

Добавлено через 2 минуты
SendKeys и переводится с англ. = послать клавишу

Добавлено через 12 минут
Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub Text1_KeyPress(KeyAscii As Integer)
    Text1.SetFocus 'Фокус можно и не переводить в обработчике клавиши Text1
    Select Case KeyAscii
    Case 248 'нажата ш !
        
        SendKeys "{BS}", True
        SendKeys "SH", True
 
    End Select
End Sub
Добавлено через 8 минут
вызов SendKeys "{BS}", True это сначало удаляется уже нарисованная "ш"
а затем тудаже отсылается "SH"
я вообще с помощью SendKeys всякие фокусы делаю
0
The trick
Модератор
7781 / 2792 / 776
Регистрация: 22.02.2013
Сообщений: 3,940
Записей в блоге: 77
24.10.2013, 00:15 8
Цитата Сообщение от JoraVoenyjHaker Посмотреть сообщение
используя SendKeys вызвав две
А ты не думаешь что SendKeys "SH", True вызовет два раза событие Press?
При замене ничего не надо придумывать, а писать стандартно
Visual Basic
1
2
3
4
5
    Select Case KeyAscii
    Case 248 'нажата ш !
        Text1.SelText = "sh"
        KeyAscii = 0
    End Select
1
JoraVoenyjHaker
Заблокирован
24.10.2013, 02:11 9
Ну да кстате можно и так, одним событием, )))

Добавлено через 7 минут
а удаление двух?

Добавлено через 23 минуты
мой вариант удаление двух !

Visual Basic
1
2
3
4
5
6
7
8
Private Sub Text1_KeyPress(KeyAscii As Integer)
    Static b As Boolean
    Select Case KeyAscii
    Case 8
        If Not b Then b = True: SendKeys "{BS}", True
    End Select
    b = False
End Sub
Добавлено через 1 минуту
Там может произойти зациклевание событий поэтому я ввёл значение b

Добавлено через 1 час 17 минут
А вот тебе туз козырный.... )))

Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub Text1_KeyPress(KeyAscii As Integer)
    Static b As Boolean
    Select Case KeyAscii
    Case 8
        If Mid$(Text1, Text1.SelStart - 1, 2) = "sh" Then _
        If Not b Then b = True: SendKeys "{BS}", True
    End Select
    b = False
End Sub
тоесть удаляется при условии встречи 2-х символов sh
1
The trick
Модератор
7781 / 2792 / 776
Регистрация: 22.02.2013
Сообщений: 3,940
Записей в блоге: 77
24.10.2013, 02:16 10
Цитата Сообщение от JoraVoenyjHaker Посмотреть сообщение
А вот тебе туз козырный.... )))
Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub Text1_KeyPress(KeyAscii As Integer)
* * Static b As Boolean
* * Select Case KeyAscii
* * Case 8
* * * * If Mid$(Text1, Text1.SelStart - 1, 2) = "sh" Then _
* * * * If Not b Then b = True: SendKeys "{BS}", True
* * End Select
* * b = False
End Sub
тоесть удаляется при условии встречи 2-х символов sh
Представь что будет если SelStart будет<=1. Это раз
А если в слове была не буква ш а две буквы сх?
1
JoraVoenyjHaker
Заблокирован
24.10.2013, 12:16 11
вот на случай ошибки если в TexBox 1 симв. остался
тоесть полностью обдуманный алгоритм

Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub Text1_KeyPress(KeyAscii As Integer)
    Static b As Boolean
    On Error Resume Next 'инстукция пропустить ошибки
    Select Case KeyAscii
    Case 8 ''''''''''''''''''''''''''''''''''''''''''''''''''''Обработка BackSpace
        If Mid$(Text1, Text1.SelStart - 1, 2) = "sh" Then _
        If Not b Then b = True: SendKeys "{BS}", True
    End Select
    b = False
End Sub
Добавлено через 6 минут
это наилучший способ !

Добавлено через 22 минуты
и ещё продвинутей....

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Text1_KeyPress(KeyAscii As Integer)
    Static b As Boolean
    On Error Resume Next
    Select Case KeyAscii
    Case 8
        Select Case Mid$(Text1, Text1.SelStart - 1, 2)
        Case "sh", "SH", "th", "ya" '......
            If Not b Then b = True: SendKeys "{BS}", True
        End Select
    End Select
    b = False
End Sub
Добавлено через 9 часов 27 минут
не поленился и сделал полезный код закинул в раздел готовых решений 5 стр.

сюда Готовые решения и полезные коды на Visual Basic 6.0
0
The trick
Модератор
7781 / 2792 / 776
Регистрация: 22.02.2013
Сообщений: 3,940
Записей в блоге: 77
24.10.2013, 12:42 12
Цитата Сообщение от JoraVoenyjHaker Посмотреть сообщение
не поленился и сделал полезный код закинул в раздел готовых решений 5 стр.
Как твой код обределяет что сочетание "SH" - это "Ш", а не "СХ"? Также должен удалять при выделении текст соответственно, клавишей Del, вставка и т.п. Ты выбрал неверный путь решения, надо использовать оригинальный текст и его транслитерировать, и при модификации модифицировать и проверять сначала на оригинале, и вывордить в текстовое поле. Также через обработчик ошибок делать не правильно, если можно проверять SelStart сразу. Также с использованием SendKeys, не самый лучший вариант.
Также добавлю, зачем использовать Dictonary, тем более в позднем связывании если можно использовать коллекции, и все будет работать быстрее.
0
JoraVoenyjHaker
Заблокирован
24.10.2013, 14:54 13
спустя 10 минут я внёс пару изменений по игнорировать пробел и
опустошении Text1
возможно еще гдето ошибки
замечания The Trick обязательно учту в будущих решениях
и спасибо за +1 неожиданно от вас )))

Добавлено через 7 минут
Цитата Сообщение от The trick Посмотреть сообщение
Ты выбрал неверный путь решения
Зато получилась неплохая подсказка для Henesi609 создателя темы )))

Добавлено через 1 час 25 минут
Только что исправил глюк 2-х символов в режиме >RUS

к примеру надо записать ч способом ch

теперь когда пишется c сначало возникает ц (мой умный алг так посчитал)
а затем если продолжить ввод и дописать h то алгоритм немедленно переведёт две
последние записанные в ч тоесть помнит последние 2 символа

Добавлено через 7 минут
Осталось только в программу воткнуть
но я этого делать не буду у меня есть Punto Switcher
у меня был чисто исследовательский интерес )))
0
SoftIce
es geht mir gut
11005 / 4404 / 1116
Регистрация: 27.07.2011
Сообщений: 10,786
Завершенные тесты: 1
24.10.2013, 17:07 14
Лучший ответ Сообщение было отмечено как решение

Решение

Замена кириллицы на транслит
4
Вложения
Тип файла: rar СyrToLat.rar (2.0 Кб, 20 просмотров)
JoraVoenyjHaker
Заблокирован
24.10.2013, 18:05 15
Да уш...
надо было мне тоже два окна сделать, добавить интерактива и мультфильмов )))

Добавлено через 21 минуту
Кстате стандарты транслитерации размыты
у меня они были взяты из Punto
у вас наверное из каких-то других источников
0
Henesi609
6 / 6 / 11
Регистрация: 18.10.2012
Сообщений: 61
24.10.2013, 18:08  [ТС] 16
Цитата Сообщение от SoftIce Посмотреть сообщение
мне нужно было сделать в одном окне
JoraVoenyjHaker,The trick +1 с вашей помощью сделал то что требовалось =)
0
JoraVoenyjHaker
Заблокирован
24.10.2013, 18:29 17
Я кстате тоже получил чтото новое от SoftIce выяснил что есть Object("vbscript.regexp")
сейчас выясняю что он умеет делать )))
0
SoftIce
es geht mir gut
11005 / 4404 / 1116
Регистрация: 27.07.2011
Сообщений: 10,786
Завершенные тесты: 1
24.10.2013, 18:39 18
Цитата Сообщение от JoraVoenyjHaker Посмотреть сообщение
regexp")
сейчас выясняю что он умеет делать )))
о, брат, это удивительная штука
0
The trick
Модератор
7781 / 2792 / 776
Регистрация: 22.02.2013
Сообщений: 3,940
Записей в блоге: 77
24.10.2013, 18:39 19
Цитата Сообщение от JoraVoenyjHaker Посмотреть сообщение
Object("vbscript.regexp")
Это библиотека Microsoft VBScript Regular Expression предназначеная для работы с регулярными выражениями, подключается через Reference. Больее мощная альтернатива стандартного Like
0
JoraVoenyjHaker
Заблокирован
24.10.2013, 18:44 20
...расскажете что означают эти ироглифы ??? обведенные жирным
CYR2LAT = ReReplace(CYR2LAT, "(^|[^А-Яа-я])е", "$1ye")
0
24.10.2013, 18:44
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2013, 18:44

Замена букв в предложении. Не работает замена кириллицы
Суть программы заменить все определенные буквы в предложении на другую. Собственно, вот код....

Замена кириллицы и проверка вхождения
Добрый день уважаемые пользователи. Реализовываю обработку прайс листа. Задача: заменить кириллицу...

Параллельное программирование. Замена кириллицы латиницей
Требуется написать программу, сначала последовательно, затем с использованием технологии OpenMP,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru