Страницы: 1
RSS
Сравнение двух csv файлов с созданием файла различий
 
Всем доброго дня и с наступающими праздниками! Случилась у меня такая задачка, покупать работу не хочу, хочу сам разобраться, что к чему, да и подтянуть себя в экселе или VBA - не мешало бы.
Суть такая. Каждое утро, в определенное место сохраняются два файла-отчета в формате csv. Куски файлов я приложил. Они могут быть, как и абсолютно одинаковые, так и содержать различия. В файлах три столбца (на самом деле больше, но важны только эти, и настроить на выгрузку только трех столбцов я могу - не суть), много строк.
Структура такова:
Документ1 - предмет001 - признак (кол-во) 7,5
Документ1 - предмет021 - признак 8,8
Документ1 - предмет038 - признак 15,4
Документ2 - предмет021 - признак 18,2
Документ2 - предмет200 - признак 12
Документ45 - предмет100 - признак 4
Документ45 - предмет170 - признак 7
Документ56 - предмет004 - признак 8,1
Документ56 - предмет001 - признак 8,7
Документ56 - предмет044 - признак 8,9

И так далее.
Во втором файле, может быть так:
Документ1 - предмет001 - признак 7,5
Документ1 - предмет021 - признак 8,8
Документ1 - предмет038 - признак 15,4
Документ45 - предмет100 - признак 4
Документ56 - предмет004 - признак 8,1
Документ56 - предмет001 - признак 8,7
Документ56 - предмет044 - признак 6

Во вложении два файла, которые имеют все возможные различия:
Отсутствие целых строк и разные значения третьего стобца
В итоге необходимо получить файл, который будет содержать различия.
В моем примере это :
Документ2 - предмет021 - признак 18,2
Документ2 - предмет200 - признак 12
Документ45 - предмет170 - признак 7
Документ56 - предмет044 - признак -2,9

Ну и если кто знает, как это все сделать в автоматическом режиме и отправить по почте на указанный адрес - вообще мегагений.
Кто сможет взяться и обучить чайника, как сделать такой вот финт.
Для меня важно понять как это все и какими функциями, формулами, макросами может обработаться в экселе. Ну а автоматизация, это уже другой, думаю не этой ветки, вопрос.

Спасибо за внимание, надеюсь на помощь.
 
Кросс - http://www.excelworld.ru/forum/10-23449-1#185476
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
в Правилах есть и про  Поиск  8)  вывести различия
словари подходящи для такого рода задач - CreateObject("scripting.dictionary")... на форуме много примеров их использования... не пренебрегайте Поиском (вверху страницы)
Изменено: JeyCi - 30.04.2016 19:07:37
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi написал: в Правилах есть и про  Поиск...
Вот про поиск я знаю. Проштудировал первые 5 страниц результатов, не нашел подходящего.
Что то похожее тут...http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=65434&TITLE_SEO=65434-zadacha... Но ответа на задачу нет.  
 
Цитата
JeyCi написал: словари подходящи для такого рода задач - CreateObject("scripting.dictionary")... на форуме много примеров их использования... не пренебрегайте Поиском (вверху страницы)
Спасибо большое, но если бы я умел этим пользоваться, мне бы и хватило поиска в гугле.

З.ы. я так понимаю, что здесь все родились гуру, помощи ждать бесполезно.
Что ж, мы люди не гордые. Готов заплатить за индивидуальный урок с последующим решением данной задачи СОВМЕСТНЫМИ с репетитором усилиями.  
 
Цитата
MadKot написал: Готов заплатить за индивидуальный урок с последующим решением данной задачи
он-лайн курсы, тренинги вверху страницы
раздел Работа в отдельной теме форума
...
линки уже и не выставляю, если вам быстрее найти всё самому (даже не пытаясь сделать что-либо самостоятельно)
p.s. много примеров, о которых я говорила - в конце концов можно хотя бы пробовать адаптировать... а получается много текста не vba - не понятно, что вам может помочь... ну что ж успехов...
...
вы никакими деньгами (кстати не указали цену) не сможете заплатить за своё понимание, если не готовы заплатить временем  ;)    
Изменено: JeyCi - 30.04.2016 19:50:34
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
JeyCi, добрый вечер, с наступающими праздниками.
Тут можно и без VBA + Power Query и VBA+SQL.
1.В файлах сцепляем данные трёх требуемых ключевых столбцов СПЕПИТЬ
2. строгий ВПР одного к другому по этому столбцах в обоих файлах
3. Автофильтр по столбцу ВПР по #Н/Д
4. Отфильтрованные строки с обеих файлов в новый файл и на отправку.
Как то так.
Изменено: Андрей VG - 30.04.2016 19:38:31
 
Андрей VG,Взаимно  :) и спасибо за алгоритм!
Цитата
Андрей VG написал: Тут можно и без VBA + Power Query и VBA+SQL.
согласна, но при таком подходе ТС, и наличии др тех.заданий в моей голове... пока не смогу помочь ему реализацией, разве что советом (словари попроще для автоматизации, мне подумалось, по данной задаче)... но вы правы: можно всё сделать руками
p.s. ваше предложение мне нравится из-за бОльшей компактности его реализации... если бы было применимо для своих целей текущих, конечно же, потренировалась бы даже с пользой для ТС... но пока пас (в голове др задачи)... раз ТС не хочет делать сам и задавать конкретные вопросы  
Изменено: JeyCi - 30.04.2016 19:57:39
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi написал:
вы никакими деньгами (кстати не указали цену) не сможете заплатить за своё понимание, если не готовы заплатить временем
Поймите, я не программист, я даже не работаю в экселе, у меня совершенно другая специфика работы. Работаю я совершенно в другой системе, просто так сложилось. Ну поймите правильно, что бы изучить полностью эксель - уйдет не один месяц, что бы изучить vba - ни один год.
Покупать готовую работу - не спортивно, хочется понять механизм. Опыт в разборе и адаптировании различных готовых конвертеров уже был. По этому я и обратился сюда за советом. Да и, может, кому то еще это пригодиться.

Может я не правильно ставлю вопросы...
Как я представляю себе это:
В определенное время, на сервере вызывается задача - выполнить vba (или не vba). Vba тащит файлы с нужной папки, сравнивает их, результат кладет в другую папку или отправляет по почте.
Это идеал.
Но еще, мне просто интересно, какими формулами или макросами можно сравнить эти две таблицы.

Повторюсь, я очень плохо знаю эксель, а vba я не знаю совсем.
Прошу прощение за недопонимание.  
Изменено: MadKot - 30.04.2016 20:03:30
 
Цитата
MadKot написал: Поймите, я не программист, ... изучить vba - ни один год
И вы думаете, что вам смогут объяснить как написать код на VBA за несколько часов?
Цитата
MadKot написал: Покупать готовую работу - не спортивно, хочется понять механизм.
Разбейте задачу на части: как найти какие файлы есть в заданной папке, как прочитать файл, как разбить строку файла на части по разделителю, что такое словарь Dictionary и как им пользоваться, как сравнить содержимое двух словарей и т. д. и в поиск - коль сами хотите разобраться. Точно такое же решение вы вряд ли найдёте. по частям легко.
 
Цитата
MadKoT написал: в определенное место сохраняются два файла-отчета в формате csv.
Почему приложили файлы в формате xlsx?
В файле Результат.xlsx алгоритм поиска различий в исходных файлах (Файл 1.xlsx и Файл 2.xlsx) однозначно "не просматривается".  :)
 
или заказывайте работу и просите откомментировать код... получите код vba с рус.яз  пояснениями какой текст vba для чего... и можно идти в поиск посмотреть используемые слова vba и изучать vba на своём примере самостоятельно, дорабатывая google'ом непонятное вам... или заказать час платной консультации разработчику после написания кода (как вариант)... но вопросы в этот час тоже лучше задавать конкретные (всему vba вы сами предчуствуете сколько учиться)
Изменено: JeyCi - 30.04.2016 20:26:23
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
Андрей VG написал: Разбейте задачу на части
Ну вот. Спасибо. Хорошая наводка. А можно поподробнее про алгоритмы действий?

Цитата
Мотя написал: Почему приложили файлы в формате xlsx? В файле Результат.xlsx алгоритм поиска...  "не просматривается".  
Ну я их сам создал. Вырвал из csv. Так сохранились.
Алгоритма поиска нет. Я его не знаю. Это я искусственно создал возможные ошибки и нужный результат.  
 
Цитата
JeyCi написал: или заказывайте работу и просите откомментировать код.
Хорошая идея. А сколько это по времени и по деньгам, как думаете?  
 
Цитата
MadKot написал: Ну я их сам создал. Вырвал из csv.
Однако, странный подход для решения проблемы.  :D
Цитата
MadKot написал: Алгоритма поиска нет. Я его не знаю.
Вы сами поняли то, что написали?!  :D
 
по времени: зависит от скорости согласования нюансов
по деньгам: как договоритесь, изначально озвучьте устраивающую вас сумму, программист сопоставит заказ и цену... если сойдётесь - ваш код... раздел Работа
Изменено: JeyCi - 30.04.2016 20:36:14
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Если хотите реальной помощи:
1. Предоставить исходные данные в реальной структуре и реальном формате.
2. Показать ожидаемый результат на их основе.
 
Цитата
MadKoT написал:
Кто сможет взяться и обучить чайника, как сделать такой вот финт
MadKot, Вы поймите - для этого ведь понадобится не один урок ))
Вы уж определитесь: Вам нужно обучение или получить готовое решение с комментариями в коде?  
 
Из примера видно что повторов в файле нет - если повторов и не может быть, то это облегчает алгоритм.
Тогда алгоритм не сложный, для ускорения можно использовать словарь - сперва заносим в словарь все данные первого файла, затем циклом по второму файлу сверяемся со словарём - если там уже такой ключ есть - то удаляем из словаря ключ, если нет - добавляем (или пишем сразу в результат). Затем в конце переписываем из словаря оставшиеся ключи в результат.
Можно в словаре держать ключ и номер строки массива с данными, в конце переписывать данные из массива в массив.
Если повторы могут быть - тогда сложнее, так сразу даже и не помню как делал... Но тоже реально написать.
Страницы: 1
Читают тему
Наверх