v8: Функция получения представления идентификатора из самого идентификатораВ конфигураторе во многих местах после ввода имени объекта некоторые другие его свойства, связанные с представлением, заполняются автоматически, преобразую имя в строку естественного языка. Это очень удобно, но программно такая функция платформы, к сожалению, недоступна. Так давайте напишем свою. | | Автор статьи: TormozIT | Редакторы: Buran Последняя редакция №5 от 28.01.07 | История URL: http://kb.mista.ru/article.php?id=457 | |
Ключевые слова: Синоним, Представление, Идентификатор
Подразумевается, что вы придерживаетесь стандартов и идентификаторы строите по правилу преобразования фразы естественного языка путем замены регистра первой буквы каждого слова в верхний и удаления всех пробелов и знаков препинания. Хотя символ "_" не рекомендуется использовать в идентификаторах, я включил его поддержку в функцию.
// Получает представление из идентификатора по правилу
// "Дебиторка_По_контрагентамСИнтерваламиСНГДля__Руководства" => "Дебиторка По контрагентам с интервалами СНГ для Руководства".
// После символа "_" регистр не меняется, а сам символ заменяется на " ".
//
// Параметры:
// ИсходнаяСтрока – Строка – идентификатор.
//
// Возвращаемое значение:
// – Строка – представление.
//
Функция ЛксПолучитьПредставлениеИзИдентификатора(ИсходнаяСтрока) Экспорт
СтрокаВозврата = Сред(ИсходнаяСтрока, 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'овые регекспы реализованы не полностью, результат выдает пробел в начале слова, да и шаблон на так изящен. Однако, код работает, проверено.
Подробнее о регулярных выражения можно почитать здесь: http://ru.wikipedia.org/wiki/Регулярные_выражения_выражения |