ИванИванович пробел сделать

1. user-z99999 67 06.09.19 13:41 Сейчас в теме
Как разделить в коде 1с строку "ИванИванович" (добавить пробел)
чтобы получилось "Иван Иванович" ?
Найденные решения
10. zarankony 305 06.09.19 14:01 Сейчас в теме
Функция ПреобразоватьТРег(Строка)
Результат = "";
Для Сч = 1 По Стрдлина(Строка) Цикл
Символ = Сред(Строка, Сч, 1);
Если Символ = ВРег(Символ) Тогда
Результат = Результат + " " + Символ;
Иначе
Результат = Результат + Символ;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. lmnlmn 69 06.09.19 13:46 Сейчас в теме
(1)
Стр = "ИванИванович";
Стр = Лев(Стр, 4) + " " + Прав(Стр, 8)
minarenko; UtSpar; +2 Ответить
4. nomad_irk 76 06.09.19 13:47 Сейчас в теме
(2)А если будет КонстантинПетрович?
5. lmnlmn 69 06.09.19 13:48 Сейчас в теме
(4)Ответил согласно постановки задачи))
6. rusdenol 06.09.19 13:49 Сейчас в теме
(5) Сходи в магазин, купи буханку хлеба, а если будут яйца, то возьми десяток ))))
3. nomad_irk 76 06.09.19 13:47 Сейчас в теме
Перебором каждой буквы, выясняешь в каком она регистре, если в верхнем, значит перед ней - пробел
7. vv2 06.09.19 13:50 Сейчас в теме
стрСлитная = "ИванИванович";
позицияБольшойБуквы = 0;

Для Й = 2 По СтрДлина(стрСлитная) Цикл
	
	символ = Сред(стрСлитная,Й,1);
	Если символ = ВРег(символ) Тогда
		позицияБольшойБуквы = Й;
		Прервать;
	КонецЕсли;
	
КонецЦикла;

Если позицияБольшойБуквы = 0 Тогда
	стрСПробелом = стрСлитная;
Иначе
	стрСПробелом = Лев(стрСлитная,позицияБольшойБуквы - 1) + " " + Сред(стрСлитная,позицияБольшойБуквы);
КонецЕсли
Показать
8. lmnlmn 69 06.09.19 13:52 Сейчас в теме
(7)надо еще добавить: "и молись чтоб цифр и символов в исходных данных не было"))
9. vv2 06.09.19 13:57 Сейчас в теме
(8)
"Константин♥Петрович" -> "Константин ♥Петрович"
"Иван1Иванович" -> "Иван 1Иванович"

Главное что исключение не вызывает :)
10. zarankony 305 06.09.19 14:01 Сейчас в теме
Функция ПреобразоватьТРег(Строка)
Результат = "";
Для Сч = 1 По Стрдлина(Строка) Цикл
Символ = Сред(Строка, Сч, 1);
Если Символ = ВРег(Символ) Тогда
Результат = Результат + " " + Символ;
Иначе
Результат = Результат + Символ;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Показать
14. user-z99999 67 06.09.19 15:06 Сейчас в теме
15. VmvLer 06.09.19 15:18 Сейчас в теме
(14) я протестил в отладке решение в 10

ПреобразоватьТРег("ИвановСтепан")	" Иванов Степан"
ПреобразоватьТРег("Дуся2Марфор7внаПет:руш")	" Дуся 2 Марфор 7вна Пет :руш"	
ПреобразоватьТРег("Мария анннаРозаСидорчук")	" Мария  аннна Роза Сидорчук"
ПреобразоватьТРег("Мария анннаРозаСидорчук")	" Мария  аннна Роза Сидорчук"
ПреобразоватьТРег("ИВановИван")	" И Ванов Иван"	


Очевидно, что когда в СлитномФИО не буквы, то результат не тот.
и когда в строке ФИО есть пробел, то этот пробел удваивается.

поэтому я ушел от упрощения и обошел такого рода ошибки.
мой вариант лишен этих недостатков и чтобы он был более полным в него можно добавить еще латиницу.
16. user-z99999 67 06.09.19 15:25 Сейчас в теме
(15)
Спасибо, но это не мой случай.
11. platonov.e 158 06.09.19 14:45 Сейчас в теме
а потом буде "ИВановИван"))
nomad_irk; +1 Ответить
12. VmvLer 06.09.19 14:54 Сейчас в теме
была такая задача и как-то костлил, а сейчас запили в расширение метод
(по комментам все разжевал)

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


результат из табло отладки

Расш1_РазделитьЧастиКиррилическогоФИОПоРегистру("ИвановСтепан") "Иванов Степан"
Расш1_РазделитьЧастиКиррилическогоФИОПоРегистру("ИвановИван") "Иванов Иван"
Расш1_РазделитьЧастиКиррилическогоФИОПоРегистру("Иванов") "Иванов"
Расш1_РазделитьЧастиКиррилическогоФИОПоРегистру("иванов") "Иванов"
Расш1_РазделитьЧастиКиррилическогоФИОПоРегистру("МарияАнннаРозаСидорчук") "Мария Аннна Роза Сидорчук"
Расш1_РазделитьЧастиКиррилическогоФИОПоРегистру("Мария анннаРозаСидорчук") "Мария Аннна Роза Сидорчук"

(11) это уже не в рамках задачи и тут уже необходимо подключать классификаторы имен, тоже можно, но на порядки сложнее.
17. SlavaVNL 8 25.11.22 17:40 Сейчас в теме
Немного привел к общему случаю:
(12)

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

Расш1_РазделитьЧастиКиррилическогоФИОПоРегистру("ИВановИван") И Ванов Иван
Расш1_РазделитьЧастиКиррилическогоФИОПоРегистру("ИвановКириллПетрович") Иванов Кирилл Петрович
Расш1_РазделитьЧастиКиррилическогоФИОПоРегистру("Дуся2Марфор7внаПет:руш") Дуся2 Марфор7вна Пет:руш
Оставьте свое сообщение

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