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