Имя: Пароль:
1C
1С v8
Алгоритм вычленения подстроки из строки
,
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% артикул идёт в базу, то что под сомнением в ручную проверку отдельным списком.