v8: Функция получения представления идентификатора из самого идентификатора
В конфигураторе во многих местах после ввода имени объекта некоторые другие его свойства, связанные с представлением, заполняются автоматически, преобразую имя в строку естественного языка. Это очень удобно, но программно такая функция платформы, к сожалению, недоступна. Так давайте напишем свою. | Автор статьи: TormozIT | Редакторы: Buran Последняя редакция №5 от 28.01.07 |
Ключевые слова: Синоним, Представление, Идентификатор
Подразумевается, что вы придерживаетесь стандартов и идентификаторы строите по правилу преобразования фразы естественного языка путем замены регистра первой буквы каждого слова в верхний и удаления всех пробелов и знаков препинания. Хотя символ "_" не рекомендуется использовать в идентификаторах, я включил его поддержку в функцию.
// Получает представление из идентификатора по правилу // "Дебиторка_По_контрагентамСИнтерваламиСНГДля__Руководства" => "Дебиторка По контрагентам с интервалами СНГ для Руководства". // После символа "_" регистр не меняется, а сам символ заменяется на " ". // // Параметры: // ИсходнаяСтрока – Строка – идентификатор. // // Возвращаемое значение: // – Строка – представление. // Функция ЛксПолучитьПредставлениеИзИдентификатора(ИсходнаяСтрока) Экспорт СтрокаВозврата = Сред(ИсходнаяСтрока, 1, 1); Для Сч = 2 По СтрДлина(ИсходнаяСтрока) Цикл ПредыдущийСимвол = Сред(ИсходнаяСтрока, Сч - 1, 1); ТекущийСимвол = Сред(ИсходнаяСтрока, Сч, 1); СледующийСимвол = Сред(ИсходнаяСтрока, Сч + 1, 1); ПослеследующийСимвол = Сред(ИсходнаяСтрока, Сч + 2, 1); Если ТекущийСимвол = "_" Тогда СтрокаВозврата = СтрокаВозврата + " "; Продолжить; ИначеЕсли ВРЕГ(ТекущийСимвол) = ТекущийСимвол Тогда Если Ложь ИЛИ ВРЕГ(ПредыдущийСимвол) <> ПредыдущийСимвол ИЛИ (Истина И ПредыдущийСимвол <> "_" И ВРЕГ(ПредыдущийСимвол) = ПредыдущийСимвол И ВРЕГ(СледующийСимвол) <> СледующийСимвол) Тогда СтрокаВозврата = СтрокаВозврата + " "; Если Ложь ИЛИ ВРЕГ(СледующийСимвол) <> СледующийСимвол ИЛИ ВРЕГ(ПослеследующийСимвол) <> ПослеследующийСимвол Тогда ТекущийСимвол = НРЕГ(ТекущийСимвол); КонецЕсли; КонецЕсли; КонецЕсли; СтрокаВозврата = СтрокаВозврата + ТекущийСимвол; КонецЦикла; Возврат СтрокаВозврата; КонецФункции // ЛксПолучитьПредставлениеИзИдентификатора()
Buran:
самым эффективным инструментом работы со строками считаются Регулярные Выражения (RegExp).
Вот пример кода с использованием регулярных выражений, аналогичный предыдущему:
RegExp = Новый COMОбъект("VBScript.RegExp"); RegExp.Global = Истина; RegExp.Pattern = "([а-я](?=[А-Я]))|([А-Я](?![А-Я]))|_"; Результат = RegExp.Replace("Дебиторка_По_контрагентамСИнтерваламиСНГДля__Руководства"," $1 $2"));
Комментарии к шаблону:
Первая скобка - поиск начала новых слов.
Вторая - чтобы не заменять аббревиатуры.
Ну, и подчерк заменяется просто пробелом.
Ввиду того, что на VBScript Perl'овые регекспы реализованы не полностью,
результат выдает пробел в начале слова, да и шаблон на так изящен. Однако, код работает, проверено.