kb-personal/src/content/docs/knowledge-base/Общие/Работа с текстом/Из UpperCamelCase в обычную строку.md
2025-10-07 14:16:34 +05:00

3.2 KiB
Raw Blame History

title, slug
title slug
Из UpperCamelCase в обычную строку общие-работа-с-текстом/из-uppercamelcase-в-обычную-строку
// Функция - Преобразует CamelCase в обычный текст.
//
// Параметры:
//  СтрокаCamelCase	- Строка - строка в стиле CamelCase. Например ВДополнительномПодменю, ВводПоСтроке и т.д.
// 
// Возвращаемое значение:
//	Строка	-	преобразованный CamelCase в обычный текст. Например "HTTPСервис" => "HTTP сервис"
//
Функция НатуральноеПредставлениеСтрокиCamelCase(Знач СтрокаCamelCase) Экспорт

    СтрокаCamelCase = СтрЗаменить(СтрокаCamelCase, "_", "");
    Результат = "";
    ПредыдущийСимвол = "";
    КоличествоЗаглавныхСимволов = 0;
    
    // Делим СтрокиТипаТакой на отдельные слова
    Для Сч = 1 По СтрДлина(СтрокаCamelCase) Цикл
        
        Символ = Сред(СтрокаCamelCase, Сч, 1);
        ЭтоЗаглавная = (Символ = ВРег(Символ));
        
        // Переход от аббревиатуры к обычному слову
        Если НЕ ЭтоЗаглавная И КоличествоЗаглавныхСимволов >= 2 Тогда
            
            Результат = Лев(Результат, СтрДлина(Результат) - 1) + " " + Прав(Результат, 1);
            
        // Начало нового слова
        ИначеЕсли ЭтоЗаглавная И КоличествоЗаглавныхСимволов = 0 И ПредыдущийСимвол <> "" Тогда
            Результат = Результат + " ";
        КонецЕсли;
        
        Результат = Результат + Символ;
        
        Если ЭтоЗаглавная Тогда
            КоличествоЗаглавныхСимволов = КоличествоЗаглавныхСимволов + 1;
        Иначе
            КоличествоЗаглавныхСимволов = 0;
        КонецЕсли;
        
        ПредыдущийСимвол = Символ;
        
    КонецЦикла;
    
    // Приведение к строчному регистра (кроме первого слова и аббревиатур)
    Слова = СтрРазделить(Результат, " ");
    
    Для Индекс = 1 По Слова.ВГраница() Цикл
        
        Слово = Слова[Индекс];
        ЭтоАббревиатура = (Слово = ВРег(Слово));
        
        Если СтрДлина(Слово) = 1 Или Не ЭтоАббревиатура Тогда // это точно не аббревиатура
            Слова[Индекс] = НРег(Слово);
        КонецЕсли;
        
    КонецЦикла;
    
    Возврат СокрЛП(СтрСоединить(Слова, " "));
    
КонецФункции