|
Алгоритм вычленения подстроки из строки | ☑ | ||
---|---|---|---|---|
0
sinisterfrag
27.02.13
✎
14:52
|
Помогите вычленить подстроку из строки. Мне нужно вычленить артикул номенклатуры. (артикул всегда 6 символов) Пользователи все забивали в наименовании и в итоге получились такие строки:
"Апельсины сочные № 990976" так же могут быть и "Апельсины № 990976 сочные" Такая функция не всегда срабатывает Функция Выделить(пНаименование) ПозицияПервогоВхождения = Найти(ВРЕГ(пНаименование), "№"); Если ПозицияПервогоВхождения = 0 Тогда Возврат Неопределено; КонецЕсли; Возврат Прав(сокрЛП(Сред(сокрЛП(пНаименование), ПозицияПервогоВхождения)), 6); КонецФункции |
|||
1
Джордж1
27.02.13
✎
14:53
|
Ищи первую цифру, от нее бери 6 знаков
|
|||
2
Wobland
27.02.13
✎
14:54
|
Апельсины № 990976 сочные № 990970
|
|||
3
rs_trade
27.02.13
✎
14:55
|
(0) Регулярки
|
|||
4
Defender aka LINN
27.02.13
✎
14:55
|
(0) Регулярные выражения
|
|||
5
Тролль главный
27.02.13
✎
14:55
|
что скажут на (2)?
|
|||
6
Serg_1960
27.02.13
✎
14:56
|
(0) Имхо, первое что бы я сделал при таком алгоритме - убрал бы все пробелы в строке!
|
|||
7
Fragster
гуру
27.02.13
✎
14:57
|
регулярка
№\s*(\d+) |
|||
8
Fragster
гуру
27.02.13
✎
14:57
|
первое подсовпадение первого совпадения
|
|||
9
Defender aka LINN
27.02.13
✎
14:58
|
(6) Угу. "Апельсины свежие сорт 2 123456".
|
|||
10
Serg_1960
27.02.13
✎
14:58
|
(5) Ничегоне скажут. У автора - "ПозицияПервогоВхождения"
|
|||
11
rs_trade
27.02.13
✎
14:58
|
(5) Как составишь, то и скажут. Нет с этим проблем.
|
|||
12
sinisterfrag
27.02.13
✎
14:59
|
Беда в том что артикул не обязательно начинаеться с цифр есть и такие ADF003 или AF0001
|
|||
13
Shurjk
27.02.13
✎
14:59
|
(3) они есть в 1с?
|
|||
14
Serg_1960
27.02.13
✎
15:00
|
(9) Мне больше нравитца наименование "Вино №777, артикул 123456" :)
|
|||
15
sinisterfrag
27.02.13
✎
15:00
|
RegExp=Новый COMОбъект("VBScript.RegExp");
|
|||
16
sinisterfrag
27.02.13
✎
15:01
|
вроде ониЮ еще в 7.7. были
|
|||
17
Птица
27.02.13
✎
15:02
|
или так:
СтрокаПоиска = РеальнаяСтрока; для к = 1 по 9 цикл СтрокаПоиска = стрЗаменить(СтрокаПоиска , ""+к,"0"); конеццикла; поз = Найти(СтрокаПоиска ,"000000"); артикул = Сред(РеальнаяСтрока,Поз,6); |
|||
18
Широкий
27.02.13
✎
15:03
|
(7) Артикул всегда 6 символов
|
|||
19
Fragster
гуру
27.02.13
✎
15:05
|
(18) тогда №\s*(\d{6})(\s|$)
|
|||
20
Птица
27.02.13
✎
15:06
|
+(17)хотя..лучше искать " 000000 " или "№000000 " или "N00000 "
|
|||
21
Тролль главный
27.02.13
✎
15:06
|
не взлетит
"рубашка черная размер 50 артикул ним456" что здесь 6-значный артикул? черная размер ним456 |
|||
22
Широкий
27.02.13
✎
15:06
|
Мой вариант
№\s*\d\s*\d\s*\d\s*\d\s*\d\s*\d |
|||
23
Serg_1960
27.02.13
✎
15:07
|
Эх... помню когда-то из адреса вырезал индекс с алгоритмом типа "найти в строке число из шести цифр"...не помню где он валяется и сохранился ли...
|
|||
24
rs_trade
27.02.13
✎
15:08
|
(21) То что после слова артикул
|
|||
25
Defender aka LINN
27.02.13
✎
15:29
|
(24) Какие ваши доказательства?
|
|||
26
rs_trade
27.02.13
✎
15:40
|
(25) По русский же написано, артикул ним456. Шаблон уже можно составить. Если юзер после слова артикул указал черт знает что, то это их проблемы. Ручками пусть перебивают.
|
|||
27
Simod
27.02.13
✎
15:42
|
(0) Возврат Лев(сокрЛП(Сред(сокрЛП(пНаименование), ПозицияПервогоВхождения + 1)), 6);
|
|||
28
Defender aka LINN
27.02.13
✎
15:58
|
(26) Я какбе символизирую, что в (0) нет ни единого слова "артикул". А реалии нынешних менеджеров таковы, чтотам окажется и "арт" и "ортикул" и еще 100500 вариантов, которые мне, вам или автору и в голову не придут.
|
|||
29
HeroShima
27.02.13
✎
16:24
|
Алгоритм должен опредлять однозначность выделенных данных. То что 100% артикул идёт в базу, то что под сомнением в ручную проверку отдельным списком.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |