Friday, April 19, 2013

Функция для возврата только числа из любой строки

Возникла ситуация, когда необходимо преобразовать в число любую строку из 1с или другого com объекта (excel,word и т.п.) при чем строки могут быть разные и содержать разные данные, функция написана, что бы быстро преобразовать в число.

Функция ВернутьЧисло(Знач ВхСтрока)

Если ТипЗнч(ВхСтрока) = Тип("Число") Тогда
Возврат ВхСтрока;
КонецЕсли;

Если НЕ ЗначениеЗаполнено(ВхСтрока) Тогда
Возврат 0;
КонецЕсли;
Если ТипЗнч(ВхСтрока) <> Тип("Строка") Тогда
Возврат 0;
КонецЕсли;

ВхСтрока = СтрЗаменить(ВхСтрока, ",", ".");

RegExp = Новый COMОбъект("VBScript.RegExp");

RegExp.MultiLine = Истина; // истина — текст многострочный, ложь — одна строка
RegExp.Global = Истина; // истина — поиск по всей строке, ложь — до первого совпадения
RegExp.IgnoreCase = Ложь; // истина — игнорировать регистр строки при поиске

RegExp.Pattern = "[^0-9\.-]";

Реплайс = RegExp.Replace(ВхСтрока,"");
Если пустаяСтрока(Реплайс) тогда
возврат 0;
КонецЕсли;

RegExp.Pattern = "[+-]?\d+\.?\d*";
Matches = RegExp.Execute(Реплайс);
Если Matches.Count>0 тогда
Возврат Число( Matches.Item(0).Value);
КонецЕсли;
Возврат 0;
КонецФункции