Добрый день, есть огромный файл, в каждой строке которого находится описание определенного товара. Где-то в этом описании есть код(ы) или артикул(ы) товара, который мне нужно извлечь и поместить в другую ячейку рядом стоящего столбца.
Сложность в том, что нет какого -то одного формата этих кодов и артикулов. Есть сочетания цифр и латинских букв, которые могут быть расположены вместе,а могут быть разделены пробелом или тире. В большинстве случаев,перед кодом может стоять буквосочетание арт. или арт.-л/арт.:, арт-л или полностью слово артикул/ артикули А после кода "шт" или к-т (комплект). Единственная особенность для всех кодов- их состав: цифры и латинские буквы, иногда код только численный без букв. Пример в приложении.
Хочу узнать можно придумать алгоритм, чтобы повытягивать все коды или это не возможно ?
Добрый день, есть огромный файл, в каждой строке которого находится описание определенного товара. Где-то в этом описании есть код(ы) или артикул(ы) товара, который мне нужно извлечь и поместить в другую ячейку рядом стоящего столбца.
Сложность в том, что нет какого -то одного формата этих кодов и артикулов. Есть сочетания цифр и латинских букв, которые могут быть расположены вместе,а могут быть разделены пробелом или тире. В большинстве случаев,перед кодом может стоять буквосочетание арт. или арт.-л/арт.:, арт-л или полностью слово артикул/ артикули А после кода "шт" или к-т (комплект). Единственная особенность для всех кодов- их состав: цифры и латинские буквы, иногда код только численный без букв. Пример в приложении.
Хочу узнать можно придумать алгоритм, чтобы повытягивать все коды или это не возможно ?l-lisa
Единственная особенность для всех кодов- их состав: цифры и латинские буквы
, а также с учетом того, что эта особенность ни коим образом не значит, что любой набор таких символов - и есть тот самый нужный код, шансы на решение задачи малы. Впрочем, если и есть вариант, то наверное, это вопрос не к форумчанам, а к вам, ну или к тем, кто формирует базу данных - отсутствие / наличие зависимости, сорри за тавтологию, зависит именно от них.
Единственная особенность для всех кодов- их состав: цифры и латинские буквы
, а также с учетом того, что эта особенность ни коим образом не значит, что любой набор таких символов - и есть тот самый нужный код, шансы на решение задачи малы. Впрочем, если и есть вариант, то наверное, это вопрос не к форумчанам, а к вам, ну или к тем, кто формирует базу данных - отсутствие / наличие зависимости, сорри за тавтологию, зависит именно от них.alex1248
skype alex12481632 Qiwi +79276708519
Сообщение отредактировал alex1248 - Воскресенье, 08.06.2014, 17:51
Function f$(s$) If r Is Nothing Then Set r = CreateObject("vbscript.regexp"): r.Global = True: r.ignorecase = True: r.MultiLine = True r.Pattern = "(?!\s)([\da-z//\s]*\d[-\da-z//\s]*[\da-z//\s])(шт)?" Set rr = CreateObject("vbscript.regexp"): rr.Global = False: rr.ignorecase = True: rr.MultiLine = False rr.Pattern = "-?\s*\d+\s*шт$" End If
Set m = r.Execute(s) If m.Count Then For i = 0 To m.Count - 1 ss = Trim(m(i)) If Right(ss, 2) = "шт" Then ss = RTrim(rr.Replace(ss, "")) If Len(ss) > 3 Then f = f & ", " & ss Next f = Mid(f, 3) End If End Function
[/vba] [p.s.] alex1248, сорри, не видел Ваш пост, когда размещал свой. Вы, конечно, во многом правы. Пожалуйста, не исправляйте своё сообщение.[/p.s.]
в первом приближении [vba]
Код
Dim r As Object, rr As Object, m As Object
Function f$(s$) If r Is Nothing Then Set r = CreateObject("vbscript.regexp"): r.Global = True: r.ignorecase = True: r.MultiLine = True r.Pattern = "(?!\s)([\da-z//\s]*\d[-\da-z//\s]*[\da-z//\s])(шт)?" Set rr = CreateObject("vbscript.regexp"): rr.Global = False: rr.ignorecase = True: rr.MultiLine = False rr.Pattern = "-?\s*\d+\s*шт$" End If
Set m = r.Execute(s) If m.Count Then For i = 0 To m.Count - 1 ss = Trim(m(i)) If Right(ss, 2) = "шт" Then ss = RTrim(rr.Replace(ss, "")) If Len(ss) > 3 Then f = f & ", " & ss Next f = Mid(f, 3) End If End Function
[/vba] [p.s.] alex1248, сорри, не видел Ваш пост, когда размещал свой. Вы, конечно, во многом правы. Пожалуйста, не исправляйте своё сообщение.[/p.s.]ikki
у меня было 35 минут. проверяйте очень внимательно. в подобных задачах ручная доработка напильником зачастую неизбежна, поэтому в результат могут быть включены "лишние" "коды". но, имхо, лучше так, чем пропускать что-то потенциально возможное.
у меня было 35 минут. проверяйте очень внимательно. в подобных задачах ручная доработка напильником зачастую неизбежна, поэтому в результат могут быть включены "лишние" "коды". но, имхо, лучше так, чем пропускать что-то потенциально возможное.ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
Сообщение отредактировал ikki - Воскресенье, 08.06.2014, 18:03
Вы просто гений! Результат точный насколько это возможно для моих данных! Погрешности есть, но от них никак не избавиться, вот к примеру: фiльтр салону 200X22X275мм-4шт возвращает 200X22X275, тут уже нужно наверное дополнительно задать условие:высота H x ширина B x длина L, но т.к. это всё равно не артикул, можно проигнорировать. Спасибо Вам огромное!
Вы просто гений! Результат точный насколько это возможно для моих данных! Погрешности есть, но от них никак не избавиться, вот к примеру: фiльтр салону 200X22X275мм-4шт возвращает 200X22X275, тут уже нужно наверное дополнительно задать условие:высота H x ширина B x длина L, но т.к. это всё равно не артикул, можно проигнорировать. Спасибо Вам огромное! l-lisa
Здравствуйте, подскажите пожалуйста, почему функция из этой строки выделяет коды: 1. Запасні частини до машини для закрива ння(запечатування)картоних коробок скотчем модель"TEKOPACK TR-557" : тримач ножа № деталі TH423B-3 -10 шт, тримач стрічки № деталі TH435B-3 -10шт, пластина тримача стрічки № деталі TH434A-2- 10шт.
а из этой не выделяет: 1.Пневматичний стрiчкообв'язувальний пристрiй AQD-19 - 15шт. Пристрiй ручний пневматичний не ротацiйного типу, для обвязки ПЕТФ причём если удалить дефис после AQD, то функция возвратит то что надо: AQD19
Здравствуйте, подскажите пожалуйста, почему функция из этой строки выделяет коды: 1. Запасні частини до машини для закрива ння(запечатування)картоних коробок скотчем модель"TEKOPACK TR-557" : тримач ножа № деталі TH423B-3 -10 шт, тримач стрічки № деталі TH435B-3 -10шт, пластина тримача стрічки № деталі TH434A-2- 10шт.
а из этой не выделяет: 1.Пневматичний стрiчкообв'язувальний пристрiй AQD-19 - 15шт. Пристрiй ручний пневматичний не ротацiйного типу, для обвязки ПЕТФ причём если удалить дефис после AQD, то функция возвратит то что надо: AQD19hatter