Имя: Пароль:
1C
 
Поиск чисел в строке
0 programmer1c
 
11.05.16
12:01
Ребята.Подскажите как верно сделать или без шаманства не обойтись.
Задача следующая есть: Наименование номенклатуры:
Пиво Черниговское 0.5 л светлое.Требуется из этих наименований выдернуть вот этот литраж, т.е. для приведенного примера нам надо вытянуть 0.5 (формат число).
1 FIXXXL
 
11.05.16
12:03
(0) а в единицах измерений у тебя разве нет этого 0,5?
2 Mikeware
 
11.05.16
12:04
дык регулярки же...
3 programmer1c
 
11.05.16
12:04
в тот то и дело,что нет
4 programmer1c
 
11.05.16
12:05
бухгалтер смотрит на наименование и сама ручками считает из бутылок в литры
5 programmer1c
 
11.05.16
12:05
номенклатуры много никто руками перезабивать не будет тм в коэффициент или еще куда-то
6 FIXXXL
 
11.05.16
12:06
(3) лучше научи ее один раз ЕдИзм завести
брать из названия - моветон, может и пробел попасть и все что угодно
7 FIXXXL
 
11.05.16
12:06
(5) ну напиши обработку, а новые пусть забивают правильно
8 programmer1c
 
11.05.16
12:07
понятно,что сячекое может вылезть
9 programmer1c
 
11.05.16
12:09
пока идея написать обработку в которой в одну колонку выведутся отобранный из названия литраж,кот можно визуально просмотреть и если че исправить
10 programmer1c
 
11.05.16
12:09
но как выцдить имеено цифры
11 FIXXXL
 
11.05.16
12:11
(10) регулярные выражения изучай
ну или кастыли типа обхода каждого символа строки и поска его в строке вида "0123456789"
12 DDwe
 
11.05.16
12:11
(10)  см.(2)
13 FIXXXL
 
11.05.16
12:12
(11) для примера: в типовых были функции типа СтрокаСодержитЦифры или как то похоже назывались
14 Shur1cIT
 
11.05.16
12:16
читать строку с конца, увеличивая каждый раз количество читаемых символов на один и конвертируя число, в какойто момент начнут появляться числа например "5 л светлое." нернет 5, если в след цикле увидел точку присваивай уже .5
увтдел 0 добавляй 0 итого получиться 0.5 как только числа закончились считай и число ивлекаемое кончилось преобразовывай смело в число
15 Shur1cIT
 
11.05.16
12:17
(14) точнее если следующая строчка число не вернула, считай ты число уже получил на предыдущим цикле его и используй
16 Shur1cIT
 
11.05.16
12:19
(15) сори за орaографические ошибки и опечатки, поток мысли смешиваються с работой)))
17 Локи-13
 
11.05.16
12:19
18 Локи-13
 
11.05.16
12:20
есть же яндекс
19 Shur1cIT
 
11.05.16
12:25
(17) примерно я также предложил только не условием проверять "ЕСли Сим>="0" и  Сим<="9" тогда
" а преобразованием, плюс прверка на символ дроби
20 Timon1405
 
11.05.16
12:27
ВходСтрока = "Пиво Черниговское 0.5 л светлое, вино 1,75л красное, бочка 1e+10";
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.IgnoreCase = Истина;
RegExp.Global = Истина;
RegExp.MultiLine = Ложь;
Паттерн = "[-+]?(?:[0-9]+(?:(\.|,)[0-9]*)?|\.[0-9]+)(?:[eE][-+]?[0-9]+)?";
RegExp.Pattern = Паттерн;
МассивСовпадений =RegExp.Execute(ВходСтрока);
Для Каждого ЭлементМассива из  МассивСовпадений Цикл
   Сообщить( ЭлементМассива.Value);
КонецЦикла
21 programmer1c
 
11.05.16
12:30
Спасибо.Сейчас буду все пробовать
22 DDwe
 
11.05.16
12:30
(20) Тестировал?
23 Timon1405
 
11.05.16
12:31
(22) в консоли кода работает, а что?
24 DDwe
 
11.05.16
12:31
+ (22) Посмотри здесь https://regex101.com, фигня выходит.
25 Timon1405
 
11.05.16
12:38
(24) какая именно фигня? вбил параметры "gi" в окне справа, в главном окне у меня подсветились 3 числа, ЧЯДНТ?
26 arsik
 
гуру
11.05.16
12:39
Опять регулярку теребят.
27 DDwe
 
11.05.16
12:42
(25) Справа точка и запятая.
28 DDwe
 
11.05.16
12:43
+ (27) И подсветились у тебя точка и запятая
29 Mikeware
 
11.05.16
12:44
(26) ну так поиск выражения - задача для конечного автомата. а регулярка - это и есть КА.
30 ttk
 
11.05.16
12:48
(26) хех, я ее как раз сегодня тоже теребил))
31 DDwe
 
11.05.16
12:49
(25) Вот сайт сам подсказывает проще, с тем же результатом как и у тебя "[0-9]+(?:(\.|,)[0-9]*)?"
32 Timon1405
 
11.05.16
12:52
(31) что-то у вас он тоже точку и запятую справа показывает а не числа?
33 DDwe
 
11.05.16
12:57
(32) Ну, так и говорю, что и у тебя, только проще.
34 Timon1405
 
11.05.16
13:02
(33) вот только на строку "Пиво Черниговское .5 л " ваша найдет "5" , а моя ".5", как вы думаете какое правильно?
35 DDwe
 
11.05.16
13:03
(34) Вот так поинтереснее будет "([-+]?(?:)[0-9]+(?:(\.|,)[0-9]*)?|\.[0-9]+)"
36 Timon1405
 
11.05.16
13:03
(34)* да и не моя она, также взял из библиотеки шаблонов первый попавшийся.
37 DDwe
 
11.05.16
13:07
(36) Вот так все найдет вроде "([-+]?(?:)[0-9]+(?:(.|,)[0-9]*)?|\.[0-9]+)(?:[eE][-+]?[0-9]+)?"
38 Timon1405
 
11.05.16
13:08
(37) Сравните с (20) ;)
39 DDwe
 
11.05.16
13:09
(20) "[-+]?(?:[0-9]+(?:(\.|,)[0-9]*)?|\.[0-9]+)(?:[eE][-+]?[0-9]+)?"

(37) "([-+]?(?:)[0-9]+(?:(.|,)[0-9]*)?|\.[0-9]+)(?:[eE][-+]?[0-9]+)?"

Найди отличие и посмотри как отрабатывают.