Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.87/86: Рейтинг темы: голосов - 86, средняя оценка - 4.87
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206

Сравнение строк в Excel

17.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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.02.2011, 18:55
Ответы с готовыми решениями:

Сравнение строк в нескольких файлах excel, копирование несовпадающих строк и их вывод в сводный файл
Добрый день, только только начал разбираться с VBA в excel, поэтому прошу помощи (схожие темы находил, но не смог преобразовать их...

Сравнение строк в Excel
Проблема такая. Имею 3 файла: 1) Список сформированый из 1с; 2) Список сформированый в какой-то старой 1-се и редактировался в опен офисе;...

Сравнение строк в Excel на совпадение
Смысл такой: Товар на складе до ревизии Смысл такой: Товар на складе до ревизии Наименование Кол-во Цена Сумма Молоко 1 ...

32
197 / 189 / 15
Регистрация: 09.02.2011
Сообщений: 457
17.02.2011, 19:29
Почитайте про регулярные выражения... Мыслите верно, самое надежное, думаю, это распарсить каждую строку на город улицу и дом, занести это все в таблицу и сравнить...
0
437 / 144 / 9
Регистрация: 12.01.2009
Сообщений: 678
Записей в блоге: 1
17.02.2011, 20:42
Есть ещё один способ решения:
Создать словарь в котором каждой записи ставится в соответствие "правильное" выражение. Сделать это нужно всё руками, но за-то в будущем обработка будет занимать гораздо меньше времени.
В общем если у вам много таких документов и обрабатывать их нужно периодически, то, на мой взгляд, это - лучшее решение.
0
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
17.02.2011, 21:10  [ТС]
Цитата Сообщение от Bazzy Посмотреть сообщение
Почитайте про регулярные выражения... Мыслите верно, самое надежное, думаю, это распарсить каждую строку на город улицу и дом, занести это все в таблицу и сравнить...
Проблема в том, что компьютер не знает, где дом, где улица и где город. Местоположения у записей, как я уже выше заметил, могут быть вообще хаотичными. Да и отчеты в разных файлах, могут придерживаться разных стандартов. Тут, как бы, в этом основная проблема.
0
197 / 189 / 15
Регистрация: 09.02.2011
Сообщений: 457
17.02.2011, 22:37
Если отчеты генерируются из БД то может быть брать все из нее? хотя думаю раз возникла такая потребность БД нет )))
компьютер не знает где город... но если перед словом написано ул. или улица, то это,скорее всего улица ))) улица обычно стоит между городом и номером дома, а в названии города цифр скорее всего нет, как и в номере дома скорее всего нет букв(больше одной) значит можно определить и город с номером дома... думаю это все решается и решается проще чем "лопатить" руками. На край есть базы данных и улиц и городов... но это уже совсем край )))
0
437 / 144 / 9
Регистрация: 12.01.2009
Сообщений: 678
Записей в блоге: 1
17.02.2011, 23:31
Опишите задачу подробно. Потом можно будет рассуждать какое решение лучше!
0
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
17.02.2011, 23:51  [ТС]
Ок.
В документе excel, начиная с A1 и вниз, в каждой строке забиты адреса, например:
город Москва, ул. Войкова, дом 26
г. Москва, Войкова 26
Войкова 26, Москва
Москва, Либнехта 15
Москва, Войкова 17
Мне нужно узнать, сколько на самом деле в документе, перечислено одинаковых адресов.
Т.е. в данном примере - 3 штучки.

Добавлено через 2 минуты
Я написал уже выборку.
Теперь нужно эти слова разделить (пытаюсь). Очень не хватает опыта работы с текстовыми переменными в целом.
Кстати говоря, разделители могут быть не только запятыми, но и просто пробелами. Или, например, нижним подчеркиванием.
Еще хочу уточнить, что улицей в адресе может быть: "2-Ленина", а в след. строке "2 - Ленина"...тут как бы, очень все непросто.
0
197 / 189 / 15
Регистрация: 09.02.2011
Сообщений: 457
18.02.2011, 10:10
прикрепите xls посмотрю
0
437 / 144 / 9
Регистрация: 12.01.2009
Сообщений: 678
Записей в блоге: 1
18.02.2011, 11:19
Цитата Сообщение от half-node Посмотреть сообщение
Ок.
В документе excel, начиная с A1 и вниз, в каждой строке забиты адреса.
Этот документ только один, или таких документов много и обрабатывать их нужно будет периодически?
Опишите подробнее.
0
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
18.02.2011, 12:21  [ТС]
Такие документы появляются периодически, практически каждый день, в достаточно большом объеме. Они все объединяются в один документ, чтобы проверить, что у разных людей, не пересекаются одинаковые адреса.
Дело в том, что они приходят от разных людей. И привести формат к единому, т.е. поговорить с людьми и убедить их делать так, как было бы хорошо для меня - невозможно.
Каждый в таком документе, будет выделываться, кто во что горазд.

Я сейчас прилагаю файл, в нем имитация данных от разных людей, объединенных в один список.
Вложения
Тип файла: xls addr.xls (18.5 Кб, 198 просмотров)
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
Получится решить... но т.к. в Вашем файле, судя по всему, секретная информация и Вы не хотите его выкладывать, то делать это придется Вам самостоятельно ))

Visual Basic
1
2
3
4
5
6
7
8
9
10
Dim intCounter as Integer
Dim intLen as Integer
Dim arrChars() as String
 
intLen = Len(inputString)-1
redim arrChars(intLen)
 
For intCounter = 0 to intLen
arrChars(intCounter) = Mid(inputString, intCounter + 1,1)
Next
1
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
18.02.2011, 13:22  [ТС]
Да информация не секретная. Тут дело в том, что есть задача, которую нужно решить.
Задачу я достаточно подробно описал. Предоставил файл, который показывает пример того, что будет в настоящем файле.
В общем, считайте что тот файл что я выложил, это уже и есть исходный файл, если Вам так проще.

Добавлено через 58 секунд
п.с. Спасибо за "пробежку" по символам.
0
 Аватар для mc-black
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
437 / 144 / 9
Регистрация: 12.01.2009
Сообщений: 678
Записей в блоге: 1
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
Цитата Сообщение от analyst Посмотреть сообщение
Если нельзя заставить сотрудников заполнять данные в ваши формы, которые вы сами можете разработать как описал mc-black, то мой вариант самый действенный. Поставленную задачу вы не решите с помощью вашего алгоритма и не решите с помощью регулярных выражений. Ну а если решите, то с меня бутылка!
Это, бутылки-то разные бывают))) регулярки будут также эффективны как и Ваш вариант, главное что и при одном и при другом варианте при появлении новых извращенцев-пользователей будет возникать необходимость создавать шаблон в регулярных выражениях или руками добавлять в какой-то "правильный список".

ПС какие цели преследуют пользователи создавая такие извращенные адреса?
0
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
18.02.2011, 18:51  [ТС]
Цитата Сообщение от Bazzy Посмотреть сообщение
ПС какие цели преследуют пользователи создавая такие извращенные адреса?
Скорее всего, я несколько утрировал.
В разрезе сегодняшнего дня, думается мне, списки будут экспортироваться из программ типа 1С или т.п. Т.е. они как-то будут типизированы. Естественно, при таком варианте проблем будет гораздо меньше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.02.2011, 18:51
Помогаю со студенческими работами здесь

Как Excel документ, в котором 10000 строк, разбить по 10 строк и сохранить каждые 10 строк в отдельный файл
Здравствуйте. Подскажите как Excel документ в котором 10000 строк разбить по 10 строк и сохранить каждые 10 строк в отдельный файл. Нашел...

Сравнение строк в двух Excel-файлах
Доброго дня. Есть два файла Excel. Как сравнить строку одного файла со строкой другого файла и в зависимости от результата сравнения...

Функции работы со строками символов: определение размера строки, копирование строк, добавление строк, сравнение строк
На языке Ассемблер написать функции работы со строками символов: определение размера строки, копирование строк, добавление строк, сравнение...

Сравнение строк одной БД с другой либо как избавится от ненужных строк
Доброе время суток! Проблема состоит в следующем. Есть корпоративная БД (то есть структуру придумывал не я) в ней есть две таблицы P с...

Сравнение строк введенных в грид и строк из массива
У меня есть массив с строками.(максимальная длина строки 8 символов, минимальная длина 3 символа). Также есть stringgrid в который я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
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, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru