Форум программистов, компьютерный форум, киберфорум
Maks
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Транслитерация текста с кириллицы на латиницу (вариант №2)

Запись от Maks размещена Сегодня в 09:38. Обновил(-а) Maks Вчера в 15:28
Показов 0 Комментарии 0

Обновленная версия ранее созданной обработки.

Добавлено:
- Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля "СтроковыеФункцииКлиентСерверРФ", который присутствует во всех типовых конфигурациях, включая БСП;
- Возможность сохранения результата в файл, через команду "Выгрузить";
- Возможность отображения букв Ъ, Ь, в качестве апострофов;
- Доработано отображение букв Е, Ё, Ж, Х, Ч, Ц, Ш, Щ, Ю, Я, в зависимости от контекста после конвертации.

1C
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
&НаКлиенте
Процедура Конвертировать(Команда)
    ОчиститьСообщения(); 
    Если НЕ СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке(Объект.ИсходныйТекст, Ложь) Тогда
        Сообщить("В исходном тексте есть символы, отличные от кириллицы! Конвертация не выполнена!");
        Возврат;
    КонецЕсли;
    Объект.Результат = КонвертироватьНаСервере(Объект.ИсходныйТекст);
КонецПроцедуры
 
&НаСервере
Функция КонвертироватьНаСервере(ИсходнаяСтрока)
 
    Если ПустаяСтрока(ИсходнаяСтрока) Тогда
        Возврат "";
    КонецЕсли;
 
    МассивЗамен = Новый Массив;
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "А", "A", ""));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Б", "B", ""));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "В", "V", ""));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Г", "G", ""));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Д", "D", ""));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Е", "E", "Ye"));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Ё", "YO", "Yo"));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Ж", "ZH", "Zh"));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "З", "Z", ""));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "И", "I", ""));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Й", "Y", "Y"));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "К", "K", ""));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Л", "L", ""));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "М", "M", ""));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Н", "N", ""));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "О", "O", ""));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "П", "P", ""));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Р", "R", ""));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "С", "S", ""));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Т", "T", ""));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "У", "U", ""));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Ф", "F", ""));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Х", "KH", "Kh"));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Ц", "TS", "Ts"));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Ч", "CH", "Ch"));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Ш", "SH", "Sh"));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Щ", "SHCH", "Shch")); 
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Ы", "Y", "Y"));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Э", "E", "E"));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Ю", "YU", "Yu"));
    МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Я", "YA", "Ya")); 
    
    Если Объект.Апостроф Тогда
        МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Ъ", "'", ""));
        МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Ь", "'", ""));
    Иначе
        МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Ъ", "", ""));
        МассивЗамен.Добавить(Новый Структура("Из,В,ВНачалеСлова", "Ь", "", ""));  
    КонецЕсли;
 
    РезультатСтрока = "";
    НачалоСлова = Истина;
 
    Для Индекс = 1 По СтрДлина(ИсходнаяСтрока) Цикл
 
        Символ = Сред(ИсходнаяСтрока, Индекс, 1);
        ЗаменаНайдена = Ложь;
 
        Для Каждого Замена Из МассивЗамен Цикл
            Если ВРег(Символ) = Замена.Из Тогда
                Если НачалоСлова И Не ПустаяСтрока(Замена.ВНачалеСлова) Тогда
                    ЗначениеЗамены = Замена.ВНачалеСлова;
                Иначе
                    ЗначениеЗамены = Замена.В;
                КонецЕсли;
 
                Если НРег(Символ) = Символ Тогда
                    РезультатСтрока = РезультатСтрока + НРег(ЗначениеЗамены);
                Иначе
                    РезультатСтрока = РезультатСтрока + ЗначениеЗамены;
                КонецЕсли;
                ЗаменаНайдена = Истина;
                Прервать;
            КонецЕсли;
        КонецЦикла;
 
        Если НЕ ЗаменаНайдена Тогда
            РезультатСтрока = РезультатСтрока + Символ;
        КонецЕсли;
 
        НачалоСлова = НЕ ЭтоБукваКириллицы(Символ);
 
    КонецЦикла;
    
    Возврат РезультатСтрока;
 
КонецФункции
 
&НаСервере
Функция ЭтоБукваКириллицы(Символ)
 
    Если ПустаяСтрока(Символ) Тогда
        Возврат Ложь;
    КонецЕсли;
 
    Код = КодСимвола(Символ);
    Возврат (Код >= 1040 И Код <= 1103) Или Код = 1025 Или Код = 1105;
 
КонецФункции
 
&НаКлиенте
Процедура Очистить(Команда)    
    ОчиститьСообщения();
    Объект.ИсходныйТекст = "";
    Объект.Результат = "";
КонецПроцедуры
 
&НаКлиенте
Процедура Выгрузить(Команда)
    
    ОчиститьСообщения();   
 
    Если Объект.Результат = "" Тогда
        Сообщить("Результат пуст! Выгрузка не выполнена!");
        Возврат;
    КонецЕсли;
    
    Режим = РежимДиалогаВыбораФайла.Сохранение;
    Диалог = Новый ДиалогВыбораФайла(Режим);
    Диалог.Заголовок  = "Выберите файл для выгрузки результата";
    Диалог.Фильтр     = "Текстовые файлы (*.txt)|*.txt";
    Диалог.Расширение = "txt";
    Диалог.МножественныйВыбор = Ложь;
 
    Если Диалог.Выбрать() Тогда
        ПутьКФайлу = Диалог.ПолноеИмяФайла;
        ВыгрузитьТекстВФайл(ПутьКФайлу, Объект.Результат);
        Сообщить("Результат успешно выгружен в файл: " + ПутьКФайлу);
    КонецЕсли;
 
КонецПроцедуры
 
&НаКлиентеНаСервереБезКонтекста
Процедура ВыгрузитьТекстВФайл(ПутьКФайлу, Текст)
 
    Запись = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8);
    Попытка
        Запись.ЗаписатьСтроку(Текст);
        Запись.Закрыть();
    Исключение
        Запись.Закрыть();
        ВызватьИсключение ОписаниеОшибки();
    КонецПопытки;
 
КонецПроцедуры
Результат:
Нажмите на изображение для увеличения
Название: Screenshot 2026-11-12 172422.png
Просмотров: 7
Размер:	25.1 Кб
ID:	12118 Нажмите на изображение для увеличения
Название: Screenshot 2026-11-12 172448.png
Просмотров: 7
Размер:	25.2 Кб
ID:	12117

Обработка: ТранслитерацияТекста.zip
Размещено в 1С
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru