Раздел форума:
Имеется текстовый файл. Его взяли и изменили, и записали под другим именем. Как сравнить эти два файла? Необходимо сказать, какая строка изменена, какая удалена или вставлена.
Что-то подобное есть уже в спец. утилите в Wimdows Commander. Однако интересует сам алгоритм: как же все-таки сравнивать строки?
Далее вводишь еще один массив of integer, его размер должен быть равен количеству строк в том файле, где их больше. Читаешь построчно оба файла, если первая строка есть во обоих файлах, то первый элемент массива равен нулю, если только в первом, то 1, а если только во втором, то 2. И далее в том же ключе для второй строки и второго элемента массива
вот вибирай любой тул какой нравится
или сразу сюда:
http://www.araxis.com/merge/index.html
ЗЫ
ваще конечно Юрий сильно помог. но зато сразу видно - на Делфи пишет
ЗЫЫ
а меня вот сдавна такой вопрос интересовал - а почему именно TString? ну в MFC там CString, мол class, а вот чего это Т? типа турбо? ;-)
Про Делфю забавно. Хотя мое предложение не намного реалистичнее :) Но ИМХО оно имеет определенный смысл в перспективе - знать стандартные юниксоидные утилиты полезно.
Кстати, "T*" у борландов исторически обозначает "Type"
diff file1.txt file2.txt
усе.
2 mike (вечный студент): в windows commander - образец, как надо сделать (меню Файл - compare by content). Мне же надо это реализовать....
1 народ не умеет писать
2 народ не умеет читать
но а ваще - до фига народу делать нечего ;-)
Павел, ты не забудь написать как жы все таки там все сравнил
А еще сторока может быть удалена, между прочим. :))) и где это таких программеров держат... да еще на яве...
не даром она потиху помирает... :)
Не все так просто. Прав cvb.
Это достаточно сложная математическая задача. Под нее есть определенная теория. Поищите в инете "Common Longest Subsequence", LCS, Fast LCS. Существует ряд алгоритмов различной модификации. Решение задачи "в лоб" приводит к непомерному росту времени работы алгоритма. При двух файлах размером в 2-3 Мб можно смело идти кофе пить часиков эдак на пару ;-) А при использовании "нормального" алгоритма - 3-4 секунды. Данный алгоритм используется в юниксоидном diff. Исходники на чистом Анси С есть как Open Source. Все можно найти и "приспособить" :-)
Теория здесь:
"An O(ND) Difference Algorithm and Its Variations*"
EUGENE W. MYERS
Николай
www.nikeware.com
p.s. Кстати ссылка имеет к обсуждаемой проблеме самое непосредственное отношение ;-)
Павлу: поставь себе побольше программ, типа Araxis Merge да посмотри, поюзай их, погляди что какими цветами выделяется и в каком случае, может какие алгоритмы и сами в башке всплывут :)
> по скриншоту видно, что работа сделана со вкусом.
Спасибо за снятую шляпу :) А желания посмотреть "в живую" не было? :)Попробуйте, может понравиться. Глядишь в скорости и Araxis Merge "снесешь" со своей машины :-)))
Коммерческое или нет, дело не в этом. В любом случае дешевле будет разобраться с теорией и воплотить ее в алгоритме, чем сидеть и что-то выдумывать (если вы конечно не Кнут какой-нибудь :-). Я в Visual Comparer тоже в ранних версиях "выдумывал". Поверьте это не просто. Но понимаешь это только тогда, когда прочитаешь теорию по предмету. После этого осознаешь, что против математики не "попрешь".
Павлу: Программы поставить нужно. Но и теорию почитать не помешает.
Кстати, куда в Берлине сходить можно, чего посмотреть интересного есть? Скоро зашлют в командировку, хотелось бы город посмотреть.
Про Берлин: Potsdamer Platz, кинотеатер IMax, панорамное кино - забавная вещь. Там крутят два типа фильмов - 3D и панорама. Советую панораму. Хотя и 3D тоже ничаво. Адресок здесь - www.imax-berlin.de. Там все найдешь. TIMETABLE - это расписание текущих фильмов, а здесь можно посмотреть конструкцию самого кинотеатра - http://www.imax-berlin.de/theater-dome.htm . Совет - при посещении стоит за минут 30 уже зайти в "предбанник", потому как билеты без мест, а с местами ситуция такова, что при панорамном лучше садится в центре и повыше, а то голову "сломать" можно :-). Поэтому лучше попасть в очередь первым.
Или может есть программы, которые можно настроить под себя?