Простенькая функция приводит "480 г" в "0,48", "10 см" в "0,1" и т.д.
Описание: при помощи регулярного выражения строка на входе делится на две переменные - значение (удаляются буквы) и название единицы измерения (оставляются только буквы). Потом по названию подбирается коэффициент умножения для приведения вес к кг, а размера к см
// Функция - Значение в единицу измерения
//
// Параметры:
// мНаименование - Строка - Наименование характеристики - может содержать единицу измерения Пример (Длина в упаковке, кг:)
// мЗначение - Строка - Само значение, может содержать единцу измерения пример (10 грамм)
//
// Возвращаемое значение:
// Число - Коэффициент умножения для привидения к КГ или СМ
//
&НаСервере
Функция ЗначениеВЕдиницуИзмерения(мНаименование,мЗначение)
ЗначЕдИзм=РегЭксп(мЗначение,"ОставитьЦифры",Истина,"");
МножителиЕдиницИзмерения=Новый Соответствие;
МножителиЕдиницИзмерения.Вставить("г","0,001");
МножителиЕдиницИзмерения.Вставить("грамм","0,001");
МножителиЕдиницИзмерения.Вставить("g","0,001");
МножителиЕдиницИзмерения.Вставить("gram","0,001");
МножителиЕдиницИзмерения.Вставить("кг","1");
МножителиЕдиницИзмерения.Вставить("килограмм","1");
МножителиЕдиницИзмерения.Вставить("kg","1");
МножителиЕдиницИзмерения.Вставить("kilogram","1");
МножителиЕдиницИзмерения.Вставить("т","1000");
МножителиЕдиницИзмерения.Вставить("тонна","1000");
МножителиЕдиницИзмерения.Вставить("ton","1000");
МножителиЕдиницИзмерения.Вставить("мм","0,1");
МножителиЕдиницИзмерения.Вставить("миллиметр","0,1");
МножителиЕдиницИзмерения.Вставить("mm","0,1");
МножителиЕдиницИзмерения.Вставить("milimetre","0,1");
МножителиЕдиницИзмерения.Вставить("см","1");
МножителиЕдиницИзмерения.Вставить("сантиметр","1");
МножителиЕдиницИзмерения.Вставить("cm","1");
МножителиЕдиницИзмерения.Вставить("centimetre","1");
МножителиЕдиницИзмерения.Вставить("дм","10");
МножителиЕдиницИзмерения.Вставить("дециметр","10");
МножителиЕдиницИзмерения.Вставить("м","100");
МножителиЕдиницИзмерения.Вставить("метр","100");
МножителиЕдиницИзмерения.Вставить("m","100");
МножителиЕдиницИзмерения.Вставить("metre","100");
МножителиЕдиницИзмерения.Вставить("км","1000");
МножителиЕдиницИзмерения.Вставить("километр","1000");
МножителиЕдиницИзмерения.Вставить("km","1000");
МножителиЕдиницИзмерения.Вставить("kilometre","1000");
НаимЕдИзм="";
НаимЕдИзмНайдено=Ложь;
РегЭксп= Новый COMОбъект("VBScript.RegExp");
РегЭксп.IgnoreCase = "True"; //Игнорировать регистр
РегЭксп.Global = Истина; //Поиск всех вхождений шаблона
РегЭксп.MultiLine = Ложь; //Многострочный режим
Для каждого ЭлементСоответствия Из МножителиЕдиницИзмерения Цикл
РегЭксп.Pattern = строка("(^|[^А-Яа-яA-Za-z])("+ЭлементСоответствия.Ключ+")([^А-Яа-яA-Za-z]|$)");
НаимЕдИзмНайдено=РегЭксп.Test(мЗначение);
Если НЕ НаимЕдИзмНайдено Тогда
НаимЕдИзмНайдено=РегЭксп.Test(мНаименование);
КонецЕсли;
Если НаимЕдИзмНайдено Тогда
НаимЕдИзм=ЭлементСоответствия.Ключ;
Прервать;
КонецЕсли;
КонецЦикла;
Если МножителиЕдиницИзмерения.Получить(НаимЕдИзм)=Неопределено Тогда
ЗначениеЕдИзм=мЗначение;
Иначе
ЗначениеЕдИзм=ЗначЕдИзм*МножителиЕдиницИзмерения[НаимЕдИзм];
КонецЕсли;
Сообщить(СтрШаблон("Значение ""%1"" => ""%2"" (%3)",мЗначение,ЗначениеЕдИзм,НаимЕдИзм));
Возврат(ЗначениеЕдИзм);
КонецФункции
Комментариев нет:
Отправить комментарий