Всем привет. Прошу помощи в решении такой задачи. Есть список названий техники из 1С. В этом списке, в каждом названии техники, с большой вероятностью прописан государственный номер техники (если гос номер ещё не выдан,то в строке он не будет указан). Задача - извлечь номера из строки. Для начала я макросом убираю все пробелы и дефисы, чтобы получить последовательность букв и чисел. Из того, что получилось, я выделил несколько закономерностей: - номер имеет длинну от 6 до 8 символов; - последние два символа - 100% буквы также, как и 4й, 5й, и 6й символы с конца - 100% числа. То есть такой шаблон ??ЧЧЧ?ББ (Ч - число, Б - буква); - всего существует четыре шаблона номеров: ЧЧЧЧЧББ, ББЧЧЧЧББ, ЧЧЧЧБББ, ЧЧЧЧББ Пример файла с названиями во вложении. P.S. база огромная, гос. номера могут быть как с дефисами, пробелами, так и с любым регистром букв, при этом буквы в номере не всегда введены кирилицей.
Еще вопрос: почему (по каким критериям) из последней строки Вашего примера выбран номер ВА8156ВС, а не 5115ВА, или 65115ВА, что тоже соответствует условиям? Может быть есть какой-то приоритет при выборе из всех возможных вариантов? Или другие доп. условия? Посмотрите пример во вложении. Откройте файл и запустите макрос. В столбце "B" будут выведены все возможные варианты номеров, удовлетворяющие Вашим условиям. Как быть?
С Камазом я пока очевидной закономерности не вижу.
А я, и, соответственно, макрос видим. После удаления пробелов, дефисов, запятых и т.п., получим строку "АВТОМОБІЛЬКАМАЗ65115ВА8156ВСАТП2004", в которой все варианты, соответствующие указанным Вами маскам, присутствуют: 5115ВА - ЧЧЧЧББ 65115ВА - ЧЧЧЧЧББ 8156ВСА - ЧЧЧЧБББ ВА8156ВС - ББЧЧЧЧББ
обычно, количество моделей гораздо меньше общего количества - можно составить таблицу хотя, видимо, не в этом случае мне кажется, удалять пробелы не надо - номера пишутся или с пробелами или без, но всегда составляют полные слова, например, вариант Трактор Беларус- 920 23968 СА КОВР. - 3968САК - явно не катит
Если формат и порядок записей в строке могут быть разные, да плюс к этому перепутаны буквы русского и латинского алфавита (как предупреждает автор вопроса), то никакая таблица не поможет. И еще.
Цитата
Трактор Беларус- 920 23968 СА КОВР. - 3968САК - явно не катит
Согласен. Такой вариант (используя пробелы) можно исключить. Но как быть, если запись такая "Трактор Беларус- 920 АА 3968 СА КОВР."?
Тут ещё надо проверять конечный результат с начальной записью. То есть при "Трактор Беларус- 920 23968 СА КОВР." 3968САК не подходит по причине, что мы взяли букву "К" со слова, которое стоит после пробела и при этом не учли цифру 2, которая идет вместе с 3968...Только вот не могу сформулировать это универсально. Я ещё на протяжении дня подумаю и отпишусь.
Derian Fox написал: Есть список названий техники из 1С.
как он туда попал?? - либо там (или где-то ещё в организации) есть список названий техники и соотв. им гос.номеров - либо сделать запрос в ГАИ о зарегистрированных на вашу организацию транспортных средствах с соотв гос номерами - либо изначально помечать как-то в строке начало и конец гос.номера - например, брать в скобки - если в поле мешанИна названий и гос.номеров - чтобы макрос чётко знал, где начало, где конец того, что нужно - либо один раз оптимизировать БД - и дальше не иметь проблем: составить таблицу транспорт-гос.номер - и работать как с БД, не препарируя каждую строчку каждый раз
Цитата
Derian Fox написал: Как извлечь гос.номер из строки
найти глазами - выделить закономерность - описать нам... в том виде, как сейчас, я вам даже глазами не скажу, где у вас трактор, а где у вас гос.номер... в любой стране есть чёткие правила формирования гос. номеров для транспортных средств, утверждённые законом и реализуемые ГАИ, которые выдаются владельцам ТС(фирмам)... либо это у вас не те номера (раз вы описываете или-или-или), либо я вас не поняла... поэтому 10 постов не могут раскрыть вашу тему p.s. лучше изначально ввести как положено , а не дефис-пробел, как понравится...
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Кроме камаза ещё ПЛМ, кран, ЗІЛ, 7561ЧКМ, 534402030001 показывает "нет номера". А он есть По камазу ситуация следующая. Есть закономерность, что во всех названиях сначала идет модель техники, а потом лишь ее гос номер. По этому логика такова: смотрим строку с конца, первое похожее на гос номер и будет нужный нам вариант. При этом при нахождении 6 символьного номера необходимо учесть, что там может быть 8 символьный, по этому если макрос определил 6-символьный гос номер, но при этом смог найти 8ми символьный, то велика вероятность, что второй верный. JeyCi, В самой БД есть отдельное поле, в котором написан гос. номер, так что "оптимизировать" или "работать как с БД" вариант не катит. Есть 1С, и есть программа, которая может выгребать данные с 1С для своих каких-то задач (и к сожалению, гос номер они не используют). А есть ещё третья программа, которая взаимодействует со второй и где надо получить эти номера. Номера прописаны одинаковые в пределах одного хозяйства/предприятия. Вот только этих предприятий более 50. А по разному они написаны (то 6 букв, то 7, то восемь, потому что есть такое понятие как "старый номер". В определенный момент было принято решения писать 4 цифры и 2 буквы. Но потом этого количества вариантов стало мало, так как с каждым годом машин становится больше, а старые гос номера не перевыдаются (машина на свалке, но гос номер четко "умрет" вместе с машиной, его не перевыпустят и не дадут кому-то другому). Вот потом и мудрили, то символ добавят, то цифры заменят буквами...Вообщем в определенный период времени был определенный стандарт этого номера.
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)