Простенькая функция приводит "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)",мЗначение,ЗначениеЕдИзм,НаимЕдИзм)); Возврат(ЗначениеЕдИзм); КонецФункции
Комментариев нет:
Отправить комментарий