|
Поиск чисел в строке | ☑ | ||
---|---|---|---|---|
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]+)?" Найди отличие и посмотри как отрабатывают. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |