CamelCase -> Camel case

// Разбивает строку из нескольких объединенных слов в строку с отдельными словами.
// Признаком начала нового слова считается символ в верхнем регистре.
//
// Параметры:
// Строка - Строка - текст с разделителями;
//
// Возвращаемое значение:
// Строка - строка, разделенная по словам.
//
// Примеры:
// РазложитьСтрокуПоСловам("ОдинДваТри") - возвратит строку "Один два три".
// РазложитьСтрокуПоСловам("одиндватри") - возвратит строку "одиндватри".
//
Функция РазложитьСтрокуПоСловам(Знач Строка)

МассивСлов = Новый Массив;

ПозицииСлов = Новый Массив;
Для ПозицияСимвола = 1 По СтрДлина(Строка) Цикл
ТекСимвол = Сред(Строка, ПозицияСимвола, 1);
Если ТекСимвол = ВРег(ТекСимвол) Тогда
ПозицииСлов.Добавить(ПозицияСимвола);
КонецЕсли;
КонецЦикла;

Если ПозицииСлов.Количество() > 0 Тогда
ПредыдущаяПозиция = 0;
Для Каждого Позиция Из ПозицииСлов Цикл
Если ПредыдущаяПозиция > 0 Тогда
Подстрока = Сред(Строка, ПредыдущаяПозиция, Позиция - ПредыдущаяПозиция);
Если Не ПустаяСтрока(Подстрока) Тогда
МассивСлов.Добавить(СокрЛП(Подстрока));
КонецЕсли;
КонецЕсли;
ПредыдущаяПозиция = Позиция;
КонецЦикла;

Подстрока = Сред(Строка, Позиция);
Если Не ПустаяСтрока(Подстрока) Тогда
МассивСлов.Добавить(СокрЛП(Подстрока));
КонецЕсли;
КонецЕсли;

Для Индекс = 1 По МассивСлов.ВГраница() Цикл
МассивСлов[Индекс] = НРег(МассивСлов[Индекс]);
КонецЦикла;

Если МассивСлов.Количество() <> 0 Тогда
Результат = СтрСоединить(МассивСлов, " ");
Иначе
Результат = Строка;
КонецЕсли;

Возврат Результат;

КонецФункции

Добавить комментарий