|
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
|
|
Сравнение строк в Excel17.02.2011, 18:55. Показов 15927. Ответов 32
Метки нет (Все метки)
Всем привет!
Столкнулся с задачей, достаточно интересной, но в виду отсутствия у меня опыта работы со строками, очень для меня непростой. Задача следующая: Есть, допустим, 500 сток текста, в которых хранятся адреса. Нужно проверить каждый из адресов на совпадения. Т.е. есть ли в таблице еще такие же адреса. Вся проблема заключается в том, что даже самые одинаковые адреса могут быть записаны по-разному. Например: "Москва, ул. Войковская, 26" "город Москва, улица Войковская, дом 26" ну и т.д. Знающие люди, подскажите пожалуйста, верно ли я мыслю? 1) Считываем строку. 2) Разбиваем ее на слова, заменяя все идущие подряд НЕ буквы и/или НЕ цифры на пробел (можно еще оставить "-") 3) Полученную строку сохраняем в переменную. Пусть в strSeek 4) Теперь начинаем по очереди считывать строки для проверки. 5) Проделываем с каждой считанной строкой пункты 2-3 и сохраняем в strTemp 4) С помощью функции InStr(Text) сравниваем strSeek с strTemp 5) Если совпадений по словам 3+, то считаем адреса идентичными. 6) далее в strTemp следующий адрес..и далее далее. Там уже все понятно, и с обработкой это уже другая история. Вот как-то так я себе это представляю. Может быть есть какой-нибудь более деликатный способ? ) Заранее спасибо.
0
|
|
| 17.02.2011, 18:55 | |
|
Ответы с готовыми решениями:
32
Сравнение строк в нескольких файлах excel, копирование несовпадающих строк и их вывод в сводный файл Сравнение строк в Excel Сравнение строк в Excel на совпадение |
|
197 / 189 / 15
Регистрация: 09.02.2011
Сообщений: 457
|
|
| 17.02.2011, 19:29 | |
|
Почитайте про регулярные выражения... Мыслите верно, самое надежное, думаю, это распарсить каждую строку на город улицу и дом, занести это все в таблицу и сравнить...
0
|
|
| 17.02.2011, 20:42 | |
|
Есть ещё один способ решения:
Создать словарь в котором каждой записи ставится в соответствие "правильное" выражение. Сделать это нужно всё руками, но за-то в будущем обработка будет занимать гораздо меньше времени. В общем если у вам много таких документов и обрабатывать их нужно периодически, то, на мой взгляд, это - лучшее решение.
0
|
|
|
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
|
||
| 17.02.2011, 21:10 [ТС] | ||
0
|
||
|
197 / 189 / 15
Регистрация: 09.02.2011
Сообщений: 457
|
|
| 17.02.2011, 22:37 | |
|
Если отчеты генерируются из БД то может быть брать все из нее? хотя думаю раз возникла такая потребность БД нет )))
компьютер не знает где город... но если перед словом написано ул. или улица, то это,скорее всего улица ))) улица обычно стоит между городом и номером дома, а в названии города цифр скорее всего нет, как и в номере дома скорее всего нет букв(больше одной) значит можно определить и город с номером дома... думаю это все решается и решается проще чем "лопатить" руками. На край есть базы данных и улиц и городов... но это уже совсем край )))
0
|
|
|
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
|
||
| 17.02.2011, 23:51 [ТС] | ||
|
Ок.
В документе excel, начиная с A1 и вниз, в каждой строке забиты адреса, например:
Т.е. в данном примере - 3 штучки. ![]() Добавлено через 2 минуты Я написал уже выборку. Теперь нужно эти слова разделить (пытаюсь). Очень не хватает опыта работы с текстовыми переменными в целом. Кстати говоря, разделители могут быть не только запятыми, но и просто пробелами. Или, например, нижним подчеркиванием. Еще хочу уточнить, что улицей в адресе может быть: "2-Ленина", а в след. строке "2 - Ленина"...тут как бы, очень все непросто.
0
|
||
|
197 / 189 / 15
Регистрация: 09.02.2011
Сообщений: 457
|
|
| 18.02.2011, 10:10 | |
|
прикрепите xls посмотрю
0
|
|
|
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
|
|
| 18.02.2011, 12:21 [ТС] | |
|
Такие документы появляются периодически, практически каждый день, в достаточно большом объеме. Они все объединяются в один документ, чтобы проверить, что у разных людей, не пересекаются одинаковые адреса.
Дело в том, что они приходят от разных людей. И привести формат к единому, т.е. поговорить с людьми и убедить их делать так, как было бы хорошо для меня - невозможно. Каждый в таком документе, будет выделываться, кто во что горазд. Я сейчас прилагаю файл, в нем имитация данных от разных людей, объединенных в один список.
0
|
|
|
197 / 189 / 15
Регистрация: 09.02.2011
Сообщений: 457
|
|
| 18.02.2011, 12:50 | |
|
Хотелось увидеть файл с реальными примерами (а не имитацию) в большем количестве... Придумать что-нибудь можно. Мне кажется вам нужно в том же акцесе создать простенькую БД вытащить из кладра или откуда-то еще названия городов улиц итд, и заставить всех работать в этой БД
0
|
|
|
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
|
|
| 18.02.2011, 13:02 [ТС] | |
|
В общем, надо полагать, что стандартными возможностями VBA - данного вопроса не решить?
Подскажите пожалуйста, есть ли возможность бежать по строке по-символьно, как при работе с char[] в С++?
0
|
|
|
197 / 189 / 15
Регистрация: 09.02.2011
Сообщений: 457
|
||||||
| 18.02.2011, 13:10 | ||||||
|
Получится решить... но т.к. в Вашем файле, судя по всему, секретная информация и Вы не хотите его выкладывать, то делать это придется Вам самостоятельно ))
1
|
||||||
|
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
|
|
| 18.02.2011, 13:22 [ТС] | |
|
Да информация не секретная. Тут дело в том, что есть задача, которую нужно решить.
Задачу я достаточно подробно описал. Предоставил файл, который показывает пример того, что будет в настоящем файле. В общем, считайте что тот файл что я выложил, это уже и есть исходный файл, если Вам так проще. ![]() Добавлено через 58 секунд п.с. Спасибо за "пробежку" по символам.
0
|
|
|
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
|
|
| 18.02.2011, 13:34 | |
|
half-node
Скажите, а как много строк на сегодняшний день, которые требуют такой обработки и сколько человек вы можете разово подключить для разовой обработки всей этой кучи (дальше справится и один человек)? Считаю, если там не 300 строк, Вам надо подойти к этому вопросу систематически. Вся входящая информация (изначальный список + все дополнения) проходит подгонку под строгий формат адреса с применением классификаторов адресов - это такой набор унифицировнных справочников-классификаторов, набодобие файлов, задействованных в программах сбора данных для пенсионного или социального страхования, предоставление информации о НДФЛ для предприятий. Сделать такой справочник непросто. Возможно получиться приспособить для этого готовые программы типа как для пенсионного страхования. Смысл - напротив каждой записи адреса в свободном текстовом формате добавить набор разделенный полей строго форматированного адреса. Так, например, город нельзя в такое поле просто ввести, его можно только выбрать из справочника (справочник при этом гарантированно полный). Если у нас улица, проспект, переулок, бульвар и т.д. то каждый из "видов улиц" записывается трого единообразно (конечно, тоже не вводится, а выбирается). Классификатор нужен и для названий улиц, а формат номера дома также обязан быть строго типизирован (тут и корпус дома номером, буквой и все в этом роде. Возможно, перевод строки в форматированный адрес удастся полуавтоматизировать, но все равно потребуется проверка корректности ввода оператором. Только тогда можно адреса сравнивать и гарантировать несовпадение. И знаю один подводный камень. Дом на на перекрестке двух улиц может иметь 2 разных номера и принадлежать двум разным улицам одновременно. На этом можно когда-то попасться.
0
|
|
|
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
|
|
| 18.02.2011, 15:54 [ТС] | |
|
Данных очень много. Они приходят со всей страны. Каждый человек в каждом городе отчет делает так, как ему удобно. Естественно, для "отстань мужик", отчет будет делаться абы как.
В общем, тут не важен смысл того, как оно есть или будет. Мне важно решить ту задачу, которую я описал в самом начале. Данных будет, явно не один десяток тысяч записей.
0
|
|
| 18.02.2011, 15:57 | |
|
Если нельзя заставить сотрудников заполнять данные в ваши формы, которые вы сами можете разработать как описал mc-black, то мой вариант самый действенный. Поставленную задачу вы не решите с помощью вашего алгоритма и не решите с помощью регулярных выражений. Ну а если решите, то с меня бутылка!
0
|
|
|
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
|
|
| 18.02.2011, 16:29 [ТС] | |
|
Я тоже постепенно прихожу к такому мнению.
0
|
|
|
197 / 189 / 15
Регистрация: 09.02.2011
Сообщений: 457
|
||
| 18.02.2011, 18:09 | ||
|
ПС какие цели преследуют пользователи создавая такие извращенные адреса?
0
|
||
|
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
|
||
| 18.02.2011, 18:51 [ТС] | ||
|
В разрезе сегодняшнего дня, думается мне, списки будут экспортироваться из программ типа 1С или т.п. Т.е. они как-то будут типизированы. Естественно, при таком варианте проблем будет гораздо меньше.
0
|
||
| 18.02.2011, 18:51 | |
|
Помогаю со студенческими работами здесь
20
Как Excel документ, в котором 10000 строк, разбить по 10 строк и сохранить каждые 10 строк в отдельный файл
Функции работы со строками символов: определение размера строки, копирование строк, добавление строк, сравнение строк Сравнение строк одной БД с другой либо как избавится от ненужных строк
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|