Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 22.09.2010, 23:15   #1
assch
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 65
По умолчанию Сравнить два текстовых файла

Есть 2 текстовых файла (1.txt , 2.txt)

1.txt:

C:\Assch
C:\boot.ini
C:\CONFIG.SYS

2.txt:

C:\Assch
C:\AUTOEXEC.BAT
C:\boot.ini
C:\Bootfont.bin
C:\CONFIG.SYS
C:\IO.SYS

Можно ли на ассемблере сделать функцию которая прочитала бы эти 2 файла
нашла изменения и создала бы файл 3.txt в котором бы прописала изменения
то есть добавленные строчки
вот так

3.txt:

C:\AUTOEXEC.BAT
C:\Bootfont.bin
C:\IO.SYS

В этих файлах очень мало строк просто для понятия смысла.
Функция нужна очень быстрая так как ей придётся сравнивать
текстовые файлы где не меньше 20000 строк.
Есть програмка кажется DiffText называется она сравнивает,
и выдаёт результаты изменения практически мгновенно.
Вопрос к знатокам: Можно ли подобную функцию сделать
на старом добром ассемлере.
Вложения
Тип файла: txt 1.txt (44 байт, 127 просмотров)
Тип файла: txt 2.txt (85 байт, 124 просмотров)
assch вне форума Ответить с цитированием
Старый 23.09.2010, 00:50   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,003
По умолчанию

отвечаю на вопрос, можно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.09.2010, 00:55   #3
assch
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 65
По умолчанию

Спасибо за обнадёживающий ответ
Не подскажете как ?
assch вне форума Ответить с цитированием
Старый 23.09.2010, 02:36   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,159
По умолчанию

assch
а зачем писать на ассемблере, когда в командной строке можно набрать:
"fc /b 1.txt 2.txt > 3.txt" сравнить по-символьно файлы 1.txt и 2.txt результат вывести в 3.txt
Mikl___ вне форума Ответить с цитированием
Старый 23.09.2010, 07:02   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

А если оч хоцца на ассемблере то мона попробовать запустить указанную выше команду функцией system из msvcrt.dll
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.09.2010, 09:34   #6
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Как вариант чтобы не изобретать велосипед просто взять исходники команды fc из мс-доса. Она на ассемблере написана )
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 23.09.2010, 12:47   #7
assch
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 65
По умолчанию

Функция fc 1.txt 2.txt > 3.txt не подходит, то есть она подойдёт, но только
в том случае если произошли не большие изменения. Эта функция создаёт файл
отчёта не больше 64кб (я узнавал мне сказали что это функция наследие
досовских времён по этому не больше 64кб) Если произошли большие изменения
то файл отчёта она бонально обрежет (я уже проверял к сожалению так оно и есть)
Вот если как тут предложили взять исходник и дополнить эту функцию то может
быть что то и получится Но к сожелению такими знаниями не обладаю.
Я писал что програмка кажется DiffText называется, с такой задачей справляется
мнгновенно, но как выдернуть от туда эту функцию?
assch вне форума Ответить с цитированием
Старый 23.09.2010, 12:54   #8
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Под какую ос нужна программа? DOS или же Виндовс? Если в виндовс - не проблемма выделять сразу огромные буферы под файл и сравнивать все что нужно. В дос придется гемороится с выделением-освобождением памяти и чтением каждый раз в нее сравниваемого файла.
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 23.09.2010, 13:01   #9
assch
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 65
По умолчанию

Виндовс
Это нужно для того чтобы выявить изменения в файловой системе
Делаешь снимок скажем папки Program Files
потом ставишь какую нибудь программу
Делаешь второй снимок
Сравниваешь и получаешь список добавленных файлов
как это делает скажем ТоталЮнистал
Не поможете?
assch вне форума Ответить с цитированием
Старый 23.09.2010, 13:12   #10
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Я очень фигово знаю winapi, поэтому написать это на ассемблере для меня будет тяжело. Написать такое на любом другом языке - не проблема. Я вот ,к примеру, всякие мелкие win32 утилиты пишу на Virtual Pascal. Я не думаю, что скорость будет сильно различаться между чистым ассемблером и любым высокоуровневым языком. В любом случае саму процедуру сравнения файлов можно сделать ассемблерной вставкой.
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме 20000 рублей в месяц

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как быстро сравнить два похожих файла? myza Microsoft Office Excel 8 26.08.2010 07:59
Сравнить два множества. Pascal MaxMelnikov Помощь студентам 3 16.03.2009 09:35
как в перле можно сравнить два файла? menik Помощь студентам 1 23.02.2009 10:16
Помогите пожалуйста сравнить два столбца ddimma Microsoft Office Excel 4 16.01.2009 09:01
Сравнить два файла Aleksandr Microsoft Office Excel 6 06.10.2008 23:22


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS