![]() |
![]() |
![]() |
|
А есть в 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); КонецЕсли; Возврат Результат; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |