Хочется странного. Есть текстовые файлы с данными, либо в csv, либо с фиксированными колонками. Нужно сравнить оригинал и то, что у нас бэкэнд выдает. Вроде бы все стандартно, но есть одно большое НО. Порядок строк в файлах может не совпадать, например
Файл 1
A
B
C
Файл 2
B
C
A
Попробовал несколько компареров, типа Araxis Merge. Все они считают эти файлы разными, хотя по сути для нас они одинаковые. Поэтому приходится импортить файлы в эксель, сортировать по какому-нить полю, экспортить обратно и уже потом сравнивать. Напрягает так, что готов уже сам что-то написать для сравнения файлов. Но для начала хочу убедиться, что готового решения нет. Сходу в гугле найти не удалось. Может кто знает такую тулзу?
Здравствуйте, olegkr, Вы писали:
O>Попробовал несколько компареров, типа Araxis Merge. Все они считают эти файлы разными, хотя по сути для нас они одинаковые. Поэтому приходится импортить файлы в эксель, сортировать по какому-нить полю, экспортить обратно и уже потом сравнивать. Напрягает так, что готов уже сам что-то написать для сравнения файлов. Но для начала хочу убедиться, что готового решения нет. Сходу в гугле найти не удалось. Может кто знает такую тулзу?
А файлы большие?
И в какой форме хочешь разницу? Или достаточно просто фака отличия?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>А файлы большие?
Не. Мелкие. Несколько килобайт.
E>И в какой форме хочешь разницу?
Пофиг. Лишь бы показывало где разница в любом виде, хоть в консоли.
Здравствуйте, olegkr, Вы писали:
O>Пофиг. Лишь бы показывало где разница в любом виде, хоть в консоли.
Ну я бы написал мегаскрипт на перле. Типа первый файл построчно складываем в хэш, потом вторым вычёркиваем. Что осталось -- пишем в stdout...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, olegkr, Вы писали:
O>Здравствуйте, Erop, Вы писали:
E>>А файлы большие? O>Не. Мелкие. Несколько килобайт.
E>>И в какой форме хочешь разницу? O>Пофиг. Лишь бы показывало где разница в любом виде, хоть в консоли.
Для такого случая, IMHO, проще всего будет отсортировать оба файла тем же sort-ом и потом сравнить diff-ом. По коду возврата можно понять, одинаковые они или нет, а отсортированные и сравнивать проще.
Здравствуйте, olegkr, Вы писали:
O>Здравствуйте, Carrier, Вы писали:
C>>Для такого случая O>Это не один случай. Скорее рутина. Видимо придется писать что-то свое.
Тот же diff может сравнивать каталоги, так что вопрос сводится к небольшому скрипту.
Все, что он должен сделать — создать пару каталогов, в один отправить отсортированные файлы КОТОРЫЕ сравнивают, в другой — отсортированные файлы С КАКИМИ сравнивают, и вызвать на каталоги diff. Перебор файлов тоже делается средствами шелла через for. Плюс парсинг результатов. Но, собственно, на этом "свое" и закончится.
Похожий вопрос. А есть ли тулза, которая может находить похожие куски текста в файлах? Практическое применение — рефакторинг, поиск и исключение дублирующего кода (почти одинаковых кусков).
Здравствуйте, midcyber, Вы писали:
M>Плохо пробовал. Режим Data Compare
Действительно плохо, не подумал, что этот режим для сравнения текстовых файлов. Спасибо огромное!
Здравствуйте, sc, Вы писали:
sc>Похожий вопрос. А есть ли тулза, которая может находить похожие куски текста в файлах? Практическое применение — рефакторинг, поиск и исключение дублирующего кода (почти одинаковых кусков).
Wiki Вам в руки — http://en.wikipedia.org/wiki/Duplicate_code
В конце страницы — список утилит.
На работе используется один из таких тулов, сейчас точно не помню как называется.
O>Это не один случай. Скорее рутина. Видимо придется писать что-то свое.
Как бы я сделал:
Сейчас у меня есть фалик a.cmd с содержимым "@ПУТЬКФАЙЛУ\Merge.exe %1 %2 %3 %4 %5", чтобы быстро запускать араксис — это тупо удобнее тем, что меньше кнопок нажимать.
Я бы добавил файл as.cmd (сравнить сортированные), который бы имел примерно такое содержимое: