Есть ли функция проверки, в каком языке написана буква

1. NatalyaVP 18.04.16 13:05 Сейчас в теме
Здравствуйте.

Подскажите, есть ли в 1С такая функция которая проверяет в каком языке (русский или английский) написана буква.


Спасибо.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Поручик 4671 18.04.16 14:24 Сейчас в теме
(1) (2) В составе БСП есть функции:
СтроковыеФункцииКлиентСервер.ТолькоКириллицаВСтроке
СтроковыеФункцииКлиентСервер.ТолькоЛатиницаВСтроке
_LkMaksimka_; Рамзес; Istur; Amigo_0; Keu2; NatalyaVP; +6 Ответить
4. Xershi 1536 18.04.16 15:47 Сейчас в теме
(3) Поручик, было бы не плохо и текст функций скопировать))
5. Поручик 4671 18.04.16 15:59 Сейчас в теме
(4) Найдёшь сам в любой бухгалтерии предприятия 3.0 или управлении торговлей 11.2 или в демке БСП.
6. Xershi 1536 18.04.16 16:04 Сейчас в теме
(5) Поручик, влом ставить или искать. Раз написал, значит под рукой. Но нет так нет.
2. foxey 4 18.04.16 13:15 Сейчас в теме
Не встречал такой функции. КодСимвола(Симв) должен Вам помочь.
КодСимвола("А") = 65, если латиница и = 1040, если кириллица.
Ставим что-то вроде Если КодСимвола(Симв) >= 1040 Тогда Сообщить("Это русская буквица") КонецЕсли;
NatalyaVP; +1 Ответить
7. Frogger1971 18.04.16 16:06 Сейчас в теме
    
Рег = Новый COMОбъект("VBScript.RegExp");
Рег.global=-1;
Рег.ignorecase=-1;
Рег.pattern="[а-я]"; 
Рег.test() 


Через коды
METAL; NatalyaVP; +2 2 Ответить
11. starik-2005 3169 21.04.16 18:43 Сейчас в теме
8. NatalyaVP 21.04.16 14:27 Сейчас в теме
Спасибо за помощь. Очень помогли.
Я сделала так:

// проверка на английские буквы а,с, А, В, С, M,
КоличествоСимволов = СтрДлина(номенклатура.наименование);
Для сч=1 По число(КоличествоСимволов) Цикл
	Код1 = КодСимвола(Сред(стр,Сч,1));  
	Если Код1=65 или Код1=66 или Код1=67 или Код1=69 или Код1=75 или Код1=77
	или Код1=79 или Код1=97 или Код1=99 Тогда 
                    // есть английские буквы
	КонецЕсли;	
КонецЦикла;
Показать
o.kovalev; +1 Ответить
9. v3rter 21.04.16 15:07 Сейчас в теме
(8)У Вас не на все английские буквы проверка, а только на ABCEKMOac ?

Если (Код1>=65 и Код1<=90) или (Код1>=97 и Код1<=122) Тогда // есть английские буквы

или

Символ1 = Сред(стр,Сч,1);
Если Найти("йцукенгшщзждлорпавыфячсмитьбюёЁЮБЬТИМСЧЯФЫВАПРОЛДЖЭЪХЗЩШГНЕ­КУЦЙ",Символ1)>0 Тогда // есть русские буквы


Коды русских букв зависят от кодировки исходного текста.

Ещё может быть полезна функция Нстр
Нстр("ru='Текст на русском';en='English text'")

которая выберет текст на том языке, который задан в настройках пользователя или конфигурации.
NatalyaVP; +1 Ответить
10. NatalyaVP 21.04.16 18:40 Сейчас в теме
(9) v3rter, да проверка только на несколько букв ABCEKMOac, другие способы оказались не совсем удобные.
Наименование состоит из русских и английских букв (L, s), также есть пробелы, тире, точки, запятые.
Мне нужно было проверить часть наименования номенклатуры (наименование двигателя).
Кто-то так постарался всё разными буквами написать, поиск осуществлять очень неудобно.
например, 4Аа50, одна буква русская, одна английская. Или АИР, а -английская, другие русские буква. Или 50МВ, м - русская, В - английская.
24. gml 24.02.25 20:07 Сейчас в теме
(9) 1. Результат функции КодСимвола() в 1С не зависит от кодировки (внутри 1С все строки представлены двухбайтовыми символами Unicode).
2. Кодировку надо учитывать, если Вы работаете с двоичными данными и анализируете значения байтов.

PS В наборе символов Unicode помимо букв латинского и русского алфавитов есть еще очень много других символов, причем некоторые из них - буквы других алфавитов, использующихся в 1С.
12. Boneman 302 22.04.16 16:26 Сейчас в теме
вот ленивые,
Поручик же показал направление
// Проверяет, содержит ли строка только символы кириллического алфавита.
//
// Параметры:
//  УчитыватьРазделителиСлов - Булево - учитывать ли разделители слов или они являются исключением.
//  ДопустимыеСимволы - строка для проверки.
//
// Возвращаемое значение:
//  Булево - Истина, если строка содержит только кириллические (или допустимые) символы или пустая;
//           Ложь, если строка содержит иные символы.
//
Функция ТолькоКириллицаВСтроке(Знач СтрокаПроверки, Знач УчитыватьРазделителиСлов = Истина, ДопустимыеСимволы = "") Экспорт
	
	Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда
		Возврат Ложь;
	КонецЕсли;
	
	Если НЕ ЗначениеЗаполнено(СтрокаПроверки) Тогда
		Возврат Истина;
	КонецЕсли;
	
	КодыДопустимыхСимволов = Новый Массив;
	КодыДопустимыхСимволов.Добавить(1105); // "ё"
	КодыДопустимыхСимволов.Добавить(1025); // "Ё"
	
	Для Индекс = 1 По СтрДлина(ДопустимыеСимволы) Цикл
		КодыДопустимыхСимволов.Добавить(КодСимвола(Сред(ДопустимыеСимволы, Индекс, 1)));
	КонецЦикла;
	
	Для Индекс = 1 По СтрДлина(СтрокаПроверки) Цикл
		КодСимвола = КодСимвола(Сред(СтрокаПроверки, Индекс, 1));
		Если ((КодСимвола < 1040) Или (КодСимвола > 1103)) 
			И (КодыДопустимыхСимволов.Найти(КодСимвола) = Неопределено) 
			И Не (Не УчитыватьРазделителиСлов И ЭтоРазделительСлов(КодСимвола)) Тогда
			Возврат Ложь;
		КонецЕсли;
	КонецЦикла;
	
	Возврат Истина;
	
КонецФункции

// Проверяет, содержит ли строка только символы латинского алфавита.
//
// Параметры:
//  УчитыватьРазделителиСлов - Булево - учитывать ли разделители слов или они являются исключением.
//  ДопустимыеСимволы - строка для проверки.
//
// Возвращаемое значение:
//  Булево - Истина, если строка содержит только латинские (или допустимые) символы;
//         - Ложь, если строка содержит иные символы.
//
Функция ТолькоЛатиницаВСтроке(Знач СтрокаПроверки, Знач УчитыватьРазделителиСлов = Истина, ДопустимыеСимволы = "") Экспорт
	
	Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда
		Возврат Ложь;
	КонецЕсли;
	
	Если НЕ ЗначениеЗаполнено(СтрокаПроверки) Тогда
		Возврат Истина;
	КонецЕсли;
	
	КодыДопустимыхСимволов = Новый Массив;
	
	Для Индекс = 1 По СтрДлина(ДопустимыеСимволы) Цикл
		КодыДопустимыхСимволов.Добавить(КодСимвола(Сред(ДопустимыеСимволы, Индекс, 1)));
	КонецЦикла;
	
	Для Индекс = 1 По СтрДлина(СтрокаПроверки) Цикл
		КодСимвола = КодСимвола(Сред(СтрокаПроверки, Индекс, 1));
		Если ((КодСимвола < 65) Или (КодСимвола > 90 И КодСимвола < 97) Или (КодСимвола > 122))
			И (КодыДопустимыхСимволов.Найти(КодСимвола) = Неопределено) 
			И Не (Не УчитыватьРазделителиСлов И ЭтоРазделительСлов(КодСимвола)) Тогда
			Возврат Ложь;
		КонецЕсли;
	КонецЦикла;
	
	Возврат Истина;
	
КонецФункции
Показать
NatalyaVP; +1 Ответить
13. v3rter 22.04.16 17:38 Сейчас в теме
(12) Boneman, А что не так с "Ё" и "ё"? Разобрался - у Ёё коды отдельно от основной массы русских букв. Сорри.

КодыДопустимыхСимволов.Добавить(1105); // "ё"
КодыДопустимыхСимволов.Добавить(1025); // "Ё"
14. deniseek77 86 22.04.16 17:40 Сейчас в теме
(13) v3rter, Они не в диапазоне общем кириллицы
15. пользователь 24.02.25 13:04
Сообщение было скрыто модератором.
...
16. Ivan7905 24.02.25 13:10 Сейчас в теме
Есть латинская буква похожая на букву йо
Ёё (RUS) Ë, ë (e-diaeresis) (латинские)
А если работаете на республики, в том числе и российские (Бурятия, Удмуртия) , то их буквы тоже надо учитывать, а иначе программа будет счиать латиснкими
17. user2107191 24.02.25 13:17 Сейчас в теме
(16) Надо в БСП добавить функцию ТолькоБурятицаВСтроке(). И ТолькоУдмуртицаВСтроке()
GeraltSnow; HanterVol; orakool; +3 Ответить
18. starik-2005 3169 24.02.25 15:30 Сейчас в теме
(17)
Надо в БСП добавить функцию
Да тут полстраны разнобуквенные. Тут вам не там...
Прикрепленные файлы:
19. user2107191 24.02.25 15:41 Сейчас в теме
(18) Ну видимо (16) ведет бухучет на государственном селькупском языке, поэтому для него это важно!
20. VmvLer 24.02.25 17:06 Сейчас в теме
Функция СтрокаБукв_RU() Экспорт
	Возврат "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЬЪЭЮЯ";
КонецФункции 
Функция Буква_RU(С) Экспорт
	Возврат Найти(СтрокаБукв_RU(), ВРег(С)) <> 0;
КонецФункции

Функция СтрокаБукв_EN() Экспорт
	Возврат "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
КонецФункции
Функция Буква_EN(С) Экспорт
	Возврат Найти(СтрокаБукв_EN(), ВРег(С)) <> 0;	
КонецФункции
Показать


СтрокаБукв_RU() и СтрокаБукв_RU() можно убрать, завернув строку в метод проверки.
Мне нужны для сбора статистики разнобоев.
21. user2116971 24.02.25 17:42 Сейчас в теме
(20) Без киргизицы не считается.
22. VmvLer 24.02.25 17:45 Сейчас в теме
(21) это для ботов, им хватит
23. miniogn 44 24.02.25 18:28 Сейчас в теме
Не тестировал, но почему бы и не...
Функция Кирилица(СтрокаПроверки)
	
	Возврат СтрРазделить(ВРег(СтрокаПроверки), "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЬЪЭЮЯ", Ложь).Количество() > 0;
	
КонецФункции

Перед использованием протестировать
25. miniogn 44 24.02.25 21:26 Сейчас в теме
(23) равно 0 конечно же, а не больше 0.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот