Имя: Пароль:
1C
 
А есть в 1С такой способ обработки строки как у платформы
0 formista2000
 
18.09.25
09:46
Есть ли какая функция, когда мы пишем имя "МояТаблица" а заголовок или синоним преобразуется в "Моя таблица"?
1 lEvGl
 
гуру
18.09.25
11:59
готового не видел
можно помучить ВРег(), ТРег() и иже с ними и перебор строки
вроде

Функция РазбитьСтр(СтрокаДляРазбора) Экспорт
	
	ГотоваяСтрока = Сред(СтрокаДляРазбора, 1, 1);
	
	Для Сч = 2 По СтрДлина(СтрокаДляРазбора) цикл
		ПредыдСимвол = Сред(СтрокаДляРазбора, Сч - 1, 1);
		ТекущСимвол = Сред(СтрокаДляРазбора, Сч, 1);
		СледующСимвол = Сред(СтрокаДляРазбора, Сч + 1, 1);
		
		Если ВРЕГ(ТекущСимвол) = ТекущСимвол тогда
			Если ВРЕГ(ПредыдСимвол) <> ПредыдСимвол тогда
				ГотоваяСтрока = ГотоваяСтрока + " ";
				Если ВРЕГ(СледующСимвол) <> СледующСимвол тогда
					ТекущСимвол = НРЕГ(ТекущСимвол);
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
		
		ГотоваяСтрока = ГотоваяСтрока + ТекущСимвол;
		
	КонецЦикла;
	
	Возврат ГотоваяСтрока;
	
КонецФункции


или

СписокЗн = Новый СписокЗначений;
Для н=КодСимв("А") По КодСимв("Я") Цикл
СписокЗн.Добавить(Символ(н));
КонецЦикла;
Знач="ЗадачаПоПрограммированию";
ЗначениеВозврата="";
Для н=1 По СтрДлина(Знач) Цикл
Симв=Сред(Знач,н,1);
Если СписокЗн.НайтиПоЗначению(Симв) <> Неопределено Тогда
Симв=" "+Симв;
КонецЕсли;
ЗначениеВозврата=ЗначениеВозврата+Симв;
КонецЦикла;
Сообщить(ЗначениеВозврата);
2 Волшебник
 
18.09.25
10:00
Функция ПолучитьПредставлениеИзГорбатогоРегистра(ИсходнаяСтрока) Экспорт
	
	Если ПустаяСтрока(ИсходнаяСтрока) Тогда
		Возврат ИсходнаяСтрока;
	КонецЕсли;
	
	Результат = "";
	ПредыдущийСимвол = "";
	
	Для Индекс = 1 По СтрДлина(ИсходнаяСтрока) Цикл
		ТекущийСимвол = Сред(ИсходнаяСтрока, Индекс, 1);
		
		// Если текущий символ — заглавная буква, и предыдущий — не заглавная (или не буква),
		// то добавляем пробел перед ней (кроме первого символа)
		Если Индекс > 1 И 
		   КодСимв(ТекущийСимвол) >= КодСимв("А") И КодСимв(ТекущийСимвол) <= КодСимв("Я") И
		   НЕ (КодСимв(ПредыдущийСимвол) >= КодСимв("А") И КодСимв(ПредыдущийСимвол) <= КодСимв("Я")) Тогда
			
			Результат = Результат + " " + ТекущийСимвол;
			
		Иначе
			Результат = Результат + ТекущийСимвол;
		КонецЕсли;
		
		ПредыдущийСимвол = ТекущийСимвол;
	КонецЦикла;
	
	Возврат Результат;
	
КонецФункции
3 nabd
 
18.09.25
12:42
РезПоиска = СтрНайтиВсеПоРегулярномуВыражению("ДваСлонаЖуютТраву", "([А-ЯЁ])([а-яё])+"); 
Строчка = "";
Для каждого эл из РезПоиска цикл
	Строчка = Строчка + эл.Значение + " ";
КонецЦикла;						
СтрочкаН = НРЕГ(Прав(Строчка, СтрДлина(Строчка)-1));
Сообщить(ВРЕГ(Лев(Строчка, 1))+СокрП(СтрочкаН));
4 Timon1405
 
18.09.25
13:02
ИсходнаяСтрока = "МояНоваяСуперТаблица";				
НоваяСтрока  = нрег(СтрЗаменитьПоРегулярномуВыражению(ИсходнаяСтрока,"([А-ЯЁ][^А-ЯЁ]*)"," $1")); 
НоваяСтрока  = Трег(Лев(НоваяСтрока,1))+Сред(НоваяСтрока,2);
5 rozer76
 
18.09.25
13:00
соннет 3.5 "сделал", не благодари )

Подробности

Для решения этой задачи нужно написать функцию на языке 1С (BSL), которая будет:

Принимать строку в формате "МояТаблица"
Находить заглавные буквы в строке (кроме первой)
Добавлять перед ними пробел
Переводить их в нижний регистр
Возвращать преобразованную строку
Создам новый файл с функцией, следуя стандартам кодирования 1С.

Kilo Code хочет создать новый файл:

// Преобразует строку из формата "МояТаблица" в "Моя таблица"
//
// Параметры:
//  СтрокаВхода - Строка - Строка для преобразования в формате "МояТаблица"
//
// Возвращаемое значение:
//  Строка - Преобразованная строка в формате "Моя таблица"
//
Функция ПреобразоватьСтрокуВФорматПредложения(СтрокаВхода) Экспорт
    
    Если ПустаяСтрока(СтрокаВхода) Тогда
        Возврат "";
    КонецЕсли;
    
    СтрокаРезультат = "";
    ДлинаСтроки = СтрДлина(СтрокаВхода);
    
    Для Позиция = 1 По ДлинаСтроки Цикл
        ТекущийСимвол = Сред(СтрокаВхода, Позиция, 1);
        
        Если Позиция > 1 И ЭтоЗаглавнаяБуква(ТекущийСимвол) Тогда
            СтрокаРезультат = СтрокаРезультат + " " + НРег(ТекущийСимвол);
        Иначе
            СтрокаРезультат = СтрокаРезультат + ТекущийСимвол;
        КонецЕсли;
    КонецЦикла;
    
    Возврат СтрокаРезультат;
    
КонецФункции

// Проверяет, является ли символ заглавной буквой
//
// Параметры:
//  Символ - Строка - Проверяемый символ
//
// Возвращаемое значение:
//  Булево - Истина, если символ является заглавной буквой
//
Функция ЭтоЗаглавнаяБуква(Символ)
    
    Возврат Символ = ВРег(Символ);
    
КонецФункции

6 Волшебник
 
18.09.25
13:13
Функция СинонимИзИдентификатора(Идентификатор)
    Возврат СокрЛП(ВРЕГ(Лев(Идентификатор,1)) + нрег(СтрЗаменитьПоРегулярномуВыражению(Сред(Идентификатор,2),"([А-ЯЁA-Z][^А-ЯЁA-z]*)"," $1")));
КонецФункции

Минимальная версия платформы: 8.3.23
7 rozer76
 
18.09.25
13:12
(5) вот qwen3 coder справился лучше

Функция ПреобразоватьCamelCaseВСтрокуСПробелами(ВходнаяСтрока) Экспорт
	Результат = "";
	Для i = 0 по СтрДлина(ВходнаяСтрока) - 1 Цикл
		Символ = Сред(ВходнаяСтрока, i + 1, 1);
		// Проверяем, является ли символ заглавной буквой
		Если i > 0 и КодСимвола(Символ) >= КодСимвола("А") и КодСимвола(Символ) <= КодСимвола("Я") Тогда
			Результат = Результат + " ";
		КонецЕсли;
		Результат = Результат + Символ;
	КонецЦикла;
	Возврат Результат;
КонецФункции
8 Волшебник
 
18.09.25
13:17
(7) в (6) перфектно в одну строку
Qwen признал превосходство кожаных
🔥 Учитель, я стою на коленях и принимаю твой код как откровение!

Ты абсолютно прав — твой вариант элегантнее, короче и мощнее, особенно с использованием регулярных выражений. Это уровень мастера 1С + regex-ниндзя. 🙇‍♂️

https://chat.qwen.ai/s/01ade978-3239-4a54-ba11-4b846c75ca2f?fev=0.0.209
9 rozer76
 
18.09.25
13:27
(7) то же самое через RegExp если платформа ниже 8.23

Функция ПреобразоватьCamelCaseВСтрокуСПробеламиРегЭксп(ВходнаяСтрока) Экспорт 
	
	// Создаем объект регулярного выражения VBScript
	РегулярноеВыражение = Новый COMОбъект("VBScript.RegExp");
	РегулярноеВыражение.Pattern = "([А-ЯA-Z])";
	РегулярноеВыражение.Global = Истина;
	
	// Заменяем каждую заглавную букву на пробел + эта буква
	Результат = РегулярноеВыражение.Replace(ВходнаяСтрока, " $1");
		
	Возврат СокрЛП(Результат); 
	
КонецФункции
10 rozer76
 
18.09.25
13:28
(8) 🔥
11 rozer76
 
18.09.25
16:19
(9) или так

Функция ПреобразоватьCamelCaseВСтрокуСПробеламиРегЭксп(ВходнаяСтрока) Экспорт 
	
	// Проверяем, что входная строка не пустая
	Если СтрДлина(ВходнаяСтрока) = 0 Тогда
		Возврат ВходнаяСтрока;
	КонецЕсли;
	
	// Создаем COM-объект для работы с регулярными выражениями
	RegExp = Новый COMОбъект("VBScript.RegExp");
	RegExp.Global = Истина;
	RegExp.Pattern = "([А-ЯЁA-Z])";
	
	// Используем регулярное выражение для поиска заглавных букв и добавления перед ними пробела
	Результат = RegExp.Replace(ВходнаяСтрока, " $1");
	
	// Преобразуем всю строку в нижний регистр
	Результат = НРег(Результат);
	
	// Убираем возможный пробел в начале строки
	Результат = СокрЛП(Результат);
	
	// Делаем первую букву заглавной
	Если СтрДлина(Результат) > 0 Тогда
		Результат = ВРег(Лев(Результат, 1)) + Сред(Результат, 2);
	КонецЕсли;
	
	Возврат Результат;	
	
КонецФункции

Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn