Имя: Пароль:
1C
1С v8
Число из строки
,
0 1C2SS
 
20.05.13
11:38
1с 8.2
Подскажите как проще всего получить число из строки содержащей число и текст. (Это характеристика. она содержит длину и цвет).
1 Cyberhawk
 
20.05.13
11:39
Хранить числовые значения характеристик в реквизитах/свойствах характеристик
2 CepeLLlka
 
20.05.13
11:43
(0)Парси удаляя по коду символа буквы, оставляя только цифры..
Или возможно у тебя у тебя они разделены спецсимволом каким(запятой, точкой) тогда просто обрезай строку и потому уже переводи Число()
3 Defender aka LINN
 
20.05.13
11:46
(2) И что получится со строкой "2 пары 37 размера"?
4 palpetrovich
 
20.05.13
11:46
RE = New COMObject("VBScript.RegExp");
   RE.Global     = истина;
   RE.IgnoreCase = истина;
   RE.Multiline  = истина;
   RE.Pattern = "\d+";
   
   Сообщить("Совпадения:");
   
   Попытка
       Для каждого Match Из RE.Execute(Строка) Цикл
           Сообщить("" + Match.Value + " @ " + Match.FirstIndex);
       КонецЦикла;
   Исключение
       Сообщить(ОписаниеОшибки());
   КонецПопытки;

// Автор  Лефмихалыч  или orefkov ...я так не разобрался :)
5 CepeLLlka
 
20.05.13
11:54
(3) "2 пары" Это что длина такая? :)
6 Defender aka LINN
 
20.05.13
11:54
(5) Это слово, которое первое в голову пришло :)
7 1C2SS
 
20.05.13
11:57
Функция ЧисловаяЧасть(стр)
   Для й  = 0 По СтрДлина(стр) Цикл
       Если Сред(стр,й,1)="," Тогда
           Возврат Число(Лев(стр,й-1));
       КонецЕсли
   КонецЦикла;
   Возврат "Ошибка";
КонецФункции
как то так
8 palpetrovich
 
20.05.13
11:58
(7) открой для себя метод Найти :)
9 1Сергей
 
20.05.13
11:59
хотите без циклов и ВК? :)
10 palpetrovich
 
20.05.13
12:03
(9) по-ходу он уже справился :)
11 Сияющий Асинхраль
 
20.05.13
12:05
(9) Хотим. Интересно узнать на будущее...
12 1C2SS
 
20.05.13
12:06
Функция ЧисловаяЧасть(стр)
   индекс = Найти(стр,",");
   Если индекс > 0 Тогда
       Возврат Лев(стр,индекс-1);
   КонецЕсли;    
   Возврат "Ошибка";
КонецФункции // ЧисловаяЧасть()
13 1Сергей
 
20.05.13
12:15
(11)

Функция ПолучитьЧисла(ИзСтроки, Числа = Неопределено, ТекущееЧислоСтр = "")
   
   Если Числа = Неопределено Тогда
       Числа = Новый СписокЗначений;
   КонецЕсли;
   
   Если ИзСтроки = "" Тогда
       Если ТекущееЧислоСтр<>"" Тогда
           Числа.Добавить(Число(ТекущееЧислоСтр));
       КонецЕсли;
       Возврат Числа;
   КонецЕсли;
   
   Если (Лев(ИзСтроки, 1)>="0") И (Лев(ИзСтроки, 1)<="9") Тогда
       ТекущееЧислоСтр = ТекущееЧислоСтр + Лев(ИзСтроки, 1);
   Иначе
       Если ТекущееЧислоСтр<>"" Тогда
           Числа.Добавить(Число(ТекущееЧислоСтр));
       КонецЕсли;
       ТекущееЧислоСтр = "";
   КонецЕсли;
   
   Возврат ПолучитьЧисла(Сред(ИзСтроки, 2), Числа, ТекущееЧислоСтр);
   
КонецФункции


Процедура КнопкаВыполнитьНажатие(Кнопка)
   Сообщить(ПолучитьЧисла(ПолеВвода));
КонецПроцедуры
14 Сияющий Асинхраль
 
20.05.13
12:15
(12) А кто сказал, что обязательно запятые будут?
15 palpetrovich
 
20.05.13
12:20
если число в строке точно одно, то так покатит:

Перем RE;
Функция ЧисловаяЧасть(стр)
   Числа = Новый СписокЗначений;
   Попытка
       Для каждого Match Из RE.Execute(стр) Цикл
           Числа =  "" + Match.Value;
       КонецЦикла;
   Исключение    КонецПопытки;
   Возврат "Ошибка";
КонецФункции // ЧисловаяЧасть()
RE = New COMObject("VBScript.RegExp");
RE.Global     = истина;
RE.IgnoreCase = истина;
RE.Multiline  = истина;
RE.Pattern = "\d+";
16 palpetrovich
 
20.05.13
12:20
* "Числа = Новый СписокЗначений;" - убрать :)
17 1C2SS
 
20.05.13
12:21
(13) Красиво.
Но чем рекурсия лучше цикла ?
18 1Сергей
 
20.05.13
12:22
(17) в данном случае ничем :) даже хуже
19 Сияющий Асинхраль
 
20.05.13
12:23
(17) +100500 :-)