Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/30: Рейтинг темы: голосов - 30, средняя оценка - 4.83
3 / 3 / 0
Регистрация: 13.09.2010
Сообщений: 46
1

Сравнить два текстовых файла

23.09.2010, 01:18. Показов 5784. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть 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 байт, 54 просмотров)
Тип файла: txt 2.txt (85 байт, 36 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.09.2010, 01:18
Ответы с готовыми решениями:

Сравнить два числа
Сравнить два числа X и Y. Если они равны, вывести на экран строку ‘X=Y’, иначе – ‘X <>Y’. Вот мой...

Сравнить два числа и вывести большее в debug на ассемблере
я не как не пойму как это сделать

Сравнить два массива и вывести наименьший их них на экран
Добрый вечер! Как сравнить два массива и вывести наименьший их них на экран??

Ввести два символа с клавиатуры и сравнить и вывести символ с большим кодом
Доброго времени суток ув. Форумчане! - - - - - Я наверное полное дно и не вижу очевидного, но...

19
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
23.09.2010, 09:00 2
Цитата Сообщение от assch Посмотреть сообщение
Можно ли подобную функцию сделать
на старом добром ассемлере
конечно можно, только не думаю что старый добрый ассемблер как то ускорит работу, читать файлы то надо все равно 21h прерыванием(если имеется в виду старый добрый дос)
0
3 / 3 / 0
Регистрация: 13.09.2010
Сообщений: 46
23.09.2010, 14:05  [ТС] 3
Нет Виндовс
Это нужно для того чтобы выявить изменения в файловой системе
Делаешь снимок скажем папки Program Files
потом ставишь какую нибудь программу
Делаешь второй снимок
Сравниваешь и получаешь список добавленных файлов
как это делает скажем ТоталЮнистал
Не поможете?
0
64 / 63 / 3
Регистрация: 16.11.2009
Сообщений: 156
23.09.2010, 22:35 4
Начнем с того, что ОС тут не имеет значения. В любой ОСи надо будет сначала загрузить файл в память и там его сравнивать. Загрузка файла вылоняется стандартными для ОСи средствами, на которые мы не можем повлиять. В Windows используется WinAPI. Самая критическая часть - это процедура сравнения.

Написал ее варант. Но работает только при соблюдении нескольких условий.
1) Файлы представляют из себя набор строк, которые заканчиваются CR+LF
2) Кодировка ASCII
3) Учитывая цель задачи, минимальная разница - 1 строка. Даже если внутри строк оличается только одна буква в третьем файле будет целая строка.
4) В конце файлов должен быть CR+LF. То-есть файлы должны заканчиваться пустыми строками. Это можно сделать внутри программы перед вызовом процедуры.
5) Самое главное. Из-за специфики задачи, предполагается, что во втором файле есть все строки первого файла + от нуля до N новых строк.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
;file1 - старый файл
;file2 - новый файл (содержит все строки старого файла)
;size2 - размер нового файла
;file3 - файл куда записывается разница
proc compare uses esi edi ebx,file1,file2,size2,file3
     mov ecx,[size2]
     mov esi,[file1]
     mov edi,[file2]
     cld
     mov eax,0Ah ;ASCII CR
search_not_equal:
     mov edx,ecx ;сохраняем кол-во байт до конца файла
     repne scasb ;ищем CR
     jne exit ;конец, если не нашли
 
     sub edx,ecx ;находим разницу между текущая кол-во байт до конца файла и началом строки
     xchg edx,ecx ;в edx сохраняется текущее кол-во байт до конца, в ecx длина строки
     mov ebx,ecx ;длина строки еще понадобится
 
     sub edi,ecx ;отматываем на начало строки нового файла
     repe cmpsb ;сравниваем одну строку старого и нового файлов
     xchg ecx,edx ;возвращаем в ecx длину строки
     je search_not_equal ;прыгаем, если строки совпали
 
     ;если строки не совпали
     sub edx,ebx 
     neg edx ;в edx получился размер от начала строки
     sub esi,edx ;возвращаемся на начало строки старого
     sub edi,edx ;и нового файлов
     xchg ebx,ecx ;сохраняем кол-во байт до конца строки в ebx, а в ecx отправляем длину строки
     mov edx,esi ;сохраняем esi
     mov esi,edi ;отправляем в esi адрес строки нового файла
     mov edi,[file3] ;а в edi адрес 3его файла
     rep movsb ;копируем строку
     mov [file3],edi ;сохраняем текущий адрес, чтобы позже писать в продолжении
     mov edi,esi ;возвращаем на свои места edi
     mov esi,edx ;esi
     mov ecx,ebx ;ecx
     jmp search_not_equal
exit:
     ret
endp
1
3 / 3 / 0
Регистрация: 13.09.2010
Сообщений: 46
24.09.2010, 01:02  [ТС] 5
Спасибо Orwomoi,
Попробую

Добавлено через 6 минут
Цитата Сообщение от Orwomoi Посмотреть сообщение
Самое главное. Из-за специфики задачи, предполагается, что во втором файле есть все строки первого файла + от нуля до N новых строк.
Правда с этим могут быть проблемы
Посмотрим

Добавлено через 1 час 20 минут

Добавлено через 1 минуту
Уважаемый Orwomoi
Пока разберусь пройдёт время а так хочется попробывать ваш алгоритм в действии.
Судя по лёгкости написания кода вы хорошо владеете ассемблером.
Сделайте пожалуйста экзешник из этого кода.
При нажатии на который если рядом лежат два файла которые нужно сравнивать.
Скажем :
1.txt -(Первый файл со старыми строчками)
2.txt -(Второй файл с добавленными строчками)
Он бы их обработал и создал бы файл:
3.txt -(Где прописались бы добавленные строчки)
Очень хочется попробывать ваш алгоритм.
У меня есть один экзешник, я написал его на языке Autoit
Который делает такое сравнение скажем папки Program Files
В файле 1.txt получается около 15000 строк
я уж не говорю сколько получится строк в файле 2.txt
Но он затрачивает на это около 5-6 секунд.
Повторю, например программа DifText делает это практически мгновенно.
Поэтому хочется посмотреть как с этим справится ассемблер.
Вам професионалу это наверное будет не трудно, тем более функция уже написана.
0
64 / 63 / 3
Регистрация: 16.11.2009
Сообщений: 156
24.09.2010, 04:38 6
Вот код для фасма. Коментариев к новой части нет, потому что это всё WinAPI, который описан в MSDN. В директории с программой должны быть файлы old_file.txt и new_file.txt, после работы появится result_file.txt Проверок на ошибки нет.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
format PE GUI 4.0
 
include 'win32a.inc'
 
section '.text' code readable executable
entry start
start:
     invoke  CreateFile,old_file.name,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
     mov     esi,eax
     invoke  GetFileSize,eax,NULL
     mov     edi,eax
     invoke  GetProcessHeap
     mov     [hHeap],eax
     mov     ebx,eax
     invoke  HeapAlloc,eax,NULL,edi
     mov     [old_file.address],eax
     invoke  ReadFile,esi,eax,edi,temp,NULL
     invoke  CloseHandle,esi
 
     invoke  CreateFile,new_file.name,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
     mov     esi,eax
     invoke  GetFileSize,eax,NULL
     mov     edi,eax
     invoke  HeapAlloc,ebx,NULL,edi
     mov     [new_file.address],eax
     mov     ebx,eax
     invoke  ReadFile,esi,eax,edi,temp,NULL
     invoke  CloseHandle,esi
 
     invoke  HeapAlloc,[hHeap],NULL,edi
     mov     [result_file.address],eax
 
     stdcall compare,[old_file.address],ebx,edi,eax
 
     mov     ebx,[result_file.address]
     sub     eax,ebx
     mov     edi,eax
 
     invoke  CreateFile,result_file.name,GENERIC_WRITE,NULL,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
     mov     esi,eax
     invoke  WriteFile,eax,ebx,edi,temp,NULL
     invoke  CloseHandle,esi
     mov     edi,[hHeap]
     xor     esi,esi
     invoke  HeapFree,edi,esi,[old_file.address]
     invoke  HeapFree,edi,esi,[new_file.address]
     invoke  HeapFree,edi,esi,ebx
 
     invoke  ExitProcess,0
 
proc compare uses esi edi ebx,file1,file2,size2,file3
     mov ecx,[size2]
     mov esi,[file1]
     mov edi,[file2]
     cld
     mov eax,0Ah
search_not_equal:
     mov edx,ecx
     repne scasb        ;search Carriage Return byte
     jne exit
 
     sub edx,ecx
     xchg edx,ecx       ;edx saves previous ecx, ecx = length of string
     mov ebx,ecx
 
     sub edi,ecx
     repe cmpsb
     xchg ecx,edx
     je search_not_equal
 
     ;if strings not equal
     sub edx,ebx
     neg edx
     sub esi,edx
     sub edi,edx
     xchg ebx,ecx
     mov edx,esi
     mov esi,edi
     mov edi,[file3]
     rep movsb
     mov [file3],edi
     mov edi,esi
     mov esi,edx
     mov ecx,ebx
     jmp search_not_equal
exit:
     mov eax,[file3]
     ret
endp
 
section '.data' data readable writeable
struc FILE name
{
   .name db name,0
   .address dd ?
}
 
hHeap dd ?
temp dd ?
old_file FILE 'old_file.txt'
new_file FILE 'new_file.txt'
result_file FILE 'result_file.txt'
 
section '.idata' import data readable writeable
library kernel32,'KERNEL32.DLL',\
        user32,'USER32.DLL'
 
include 'api\kernel32.inc'
include 'api\user32.inc'
Я проверял на примерах из первого поста.
1
158 / 105 / 6
Регистрация: 22.08.2010
Сообщений: 215
24.09.2010, 11:20 7
Цитата Сообщение от Orwomoi Посмотреть сообщение
Начнем с того, что ОС тут не имеет значения.
Я думаю, что имеет, особенно под реальный режим DOS. Если файлы > 1 мегабайта - придется некисло извращаться с чтением то одного то другого файла кусками в память.
0
3 / 3 / 0
Регистрация: 13.09.2010
Сообщений: 46
24.09.2010, 14:11  [ТС] 8
Спасибо Orwomoi
Попробую сделать
правда придётся скачать фасм и поучится с ним работать
я раньше имел дело с masm32 с ним я знал как обращатся
но попробую справится
В любом случае большое спасибо за участие

Ещё раз извините
этот код я должен скомпилировать в фасме и получится экзешник?
0
64 / 63 / 3
Регистрация: 16.11.2009
Сообщений: 156
24.09.2010, 14:34 9
В данном случае код полностью готов для компилирования. Достаточно скопировать в фасм и нажать compile. Ему не нужны ключи коммандной строки. По окончанию выполнения будет exe.

Кстати, насчет скорости исполнения. Добавил подсчет.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
format PE CONSOLE
 
include 'win32a.inc'
 
section '.text' code readable executable
entry start
start:
     invoke  CreateFile,old_file.name,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
     mov     esi,eax
     invoke  GetFileSize,eax,NULL
     mov     edi,eax
     invoke  GetProcessHeap
     mov     [hHeap],eax
     mov     ebx,eax
     invoke  HeapAlloc,eax,NULL,edi
     mov     [old_file.address],eax
     invoke  ReadFile,esi,eax,edi,temp,NULL
     invoke  CloseHandle,esi
 
     invoke  CreateFile,new_file.name,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
     mov     esi,eax
     invoke  GetFileSize,eax,NULL
     mov     edi,eax
     invoke  HeapAlloc,ebx,NULL,edi
     mov     [new_file.address],eax
     mov     ebx,eax
     invoke  ReadFile,esi,eax,edi,temp,NULL
     invoke  CloseHandle,esi
 
     invoke  HeapAlloc,[hHeap],NULL,edi
     mov     [result_file.address],eax
 
     invoke  GetCurrentThread
     invoke  SetThreadPriority,eax,THREAD_PRIORITY_TIME_CRITICAL
     rdtsc
     mov     esi,eax
 
     stdcall compare,[old_file.address],ebx,edi,[result_file.address]
     mov     ebx,eax
     rdtsc
     mov     edi,eax
 
     invoke  GetCurrentThread
     invoke  SetThreadPriority,eax,THREAD_PRIORITY_NORMAL
 
     sub     edi,esi
     cinvoke printf,cycles,edi
 
     mov     esi,[result_file.address]
     sub     ebx,esi
 
     invoke  CreateFile,result_file.name,GENERIC_WRITE,NULL,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
     mov     edi,eax
     invoke  WriteFile,eax,esi,ebx,temp,NULL
     invoke  CloseHandle,edi
     mov     edi,[hHeap]
     xor     ebx,ebx
     invoke  HeapFree,edi,ebx,[old_file.address]
     invoke  HeapFree,edi,ebx,[new_file.address]
     invoke  HeapFree,edi,ebx,esi
     invoke  Sleep,2000
 
     invoke  ExitProcess,0
 
proc compare uses esi edi ebx,file1,file2,size2,file3
     mov ecx,[size2]
     mov esi,[file1]
     mov edi,[file2]
     cld
     mov eax,0Ah
search_not_equal:
     mov edx,ecx
     repne scasb        ;search Carriage Return byte
     jne exit
 
     sub edx,ecx
     xchg edx,ecx       ;edx saves previous ecx, ecx = length of string
     mov ebx,ecx
 
     sub edi,ecx
     repe cmpsb
     xchg ecx,edx
     je search_not_equal
 
     ;if strings not equal
     sub edx,ebx
     neg edx
     sub esi,edx
     sub edi,edx
     xchg ebx,ecx
     mov edx,esi
     mov esi,edi
     mov edi,[file3]
     rep movsb
     mov [file3],edi
     mov edi,esi
     mov esi,edx
     mov ecx,ebx
     jmp search_not_equal
exit:
     mov eax,[file3]
     ret
endp
 
section '.data' data readable writeable
struc FILE name
{
   .name db name,0
   .address dd ?
}
 
hHeap dd ?
temp dd ?
cycle_count dd ?
old_file FILE 'old_file.txt'
new_file FILE 'new_file.txt'
result_file FILE 'result_file.txt'
 
cycles db 'Cycles %d',13,10,0
 
section '.idata' import data readable writeable
library kernel32,'KERNEL32.DLL',\
        user32,'USER32.DLL',\
        msvcrt,'msvcrt.dll'
 
include 'api\kernel32.inc'
include 'api\user32.inc'
import msvcrt,\
       printf,'printf'
На пентиум4, с файлами ниже, процедура выполняется за 2000 циклов. Из них, наверное, около 100 циклов уходит на rdtsc.
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
1
3 / 3 / 0
Регистрация: 13.09.2010
Сообщений: 46
24.09.2010, 14:56  [ТС] 10
Уважаемый Orwomoi
Прошу прощения за наглость
Я так понимаю Фасм у вас под рукой
Вы не могли бы скомпилировать у себя этот екзешник и прикрепить его
например в архивированном виде в это теме у себя в ответе
Я так понимаю он весит не много (чем собственно и славится ассемблер)
Просто так будет быстрей пока я скачаю и разберусь с Фасмом
Ещё раз прошу прощения за наглость
0
64 / 63 / 3
Регистрация: 16.11.2009
Сообщений: 156
24.09.2010, 15:49 11
Переименовать в exe.

P.S. Давайте меньше формальностей.
Вложения
Тип файла: txt comparefiles.txt (2.0 Кб, 65 просмотров)
1
3 / 3 / 0
Регистрация: 13.09.2010
Сообщений: 46
24.09.2010, 16:45  [ТС] 12
Orwomoi,

При открывании мои винды выдали сообщение
Что можно ли его использовать отсутсвует какая то цифровая подпись
я конечно это окно отключил но странно почему
И главное почему при работе экзешника открывается чёрное окно командной строки
можно ли чтобы он сработал в фоновом режиме без этого чёрного окна

А насчёт эфективности на первый взгляд выше всяких похвал
Я сравнил файл весом 1.08mb и 1.76mb
то есть снимки всего диска С до и после установки программы Pinnacle
и она справилась меньше чем за секунду

Добавлено через 30 минут
Хотя нет не так всё гладко
файл отчёта он сделал весом 1.75мб
тоесть записал в него не то что именно нужно
Буду тестить дальше
0
64 / 63 / 3
Регистрация: 16.11.2009
Сообщений: 156
24.09.2010, 17:23 13
Не знаю зачем ему нужна цифровая подпись. Это, наврное, параноя Висты или Семерки.
В черном окне консоли выводится кол-во циклов, сколько выполнялась процедура. Сравнить два текстовых файла - вариант без консоли. Прикрепил скомпилированный экзешник.
Если result_file такой большой... Возможно в new_file нет какото-то символа\строки из old_file и он посчитал всё остальное новым.
Вложения
Тип файла: txt compare.txt (2.0 Кб, 28 просмотров)
0
3 / 3 / 0
Регистрация: 13.09.2010
Сообщений: 46
24.09.2010, 18:16  [ТС] 14
За без консольный вариант спасибо
У меня обычная XP
И честно говоря самому странно почему такие сообщения
ведь этот екзешник не вносит какие то изменения в систему (или я не прав)
Обычно эти сообщения винды навязывают когда ставишь какую нибудь не пондравившуюся ей программу (но та то хоть понятно
ведь прога пытается записать какие то файлы в систему а здесь почему ?)
Буду тестить экзешник
Может придётся чуть чуть подравить алгоритм

Я собственно говоря работаю с языком Autoit и соответственно у меня есть функция на этом языке.
Просто при сравнении списков файлов (до и после) например папки Program Files где в каждом из текстовых файлов
больше 15000 строк, эта функция затрачивает около 5-6 секунд (относительно быстро)и она вроде бы правильно отображает результаты.
Правда функция требует наличие установленного Фраймвёрка 2 иначе просто выскакивает сообщение об ошибке Не критично но
в некоторых случаях не удобно
Просто программы подобного рода например DiffText делают это практически мгновенно и без всякого фраемвёрка.
Поэтому я и хотел попробывать асемблерную вставку (простой экзешник на ассемблере) Проще говоря хотел сравнить.
Ну и ради интереса хотел бы знать какими алгоритмами работают эти программы типа DiffText
Кстати этот алгоритм Diff обсуждается по этой ссылке
http://ru.wikipedia.org/wiki/Diff
Я тоже пытался сделать свою функцию на Atoit
Алгоритм там у меня такой:
Из двух файлов создаются два масива
Потом из первого (старого) масива берётся первая строчка и парсингом ищется во втором масиве
как только находит совпадение она удаляет эту строчку из второго масива
потом переходит на вторую строчку первого масива и также ищет если не находит то просто
переходит на следующую строчку первого масива
Тоесть все строчки что были в первом масиве она удаляет во втором масиве
ну и остатки второго масива записывает в файл отчёта
Работает этот алгоритм безупречно но и соответсвенно долго
Скажем если функция с Фраемвёрком 2 это сделает за 5-6 секунд
то моей требуется около 2 минут
Я понимаю что я может быть делаю что то не так (Знаний пока не хватает)
Интересно а мой алгоритм можно перекинуть на ассемблер
может быть там он будет работать побыстрее?
0
64 / 63 / 3
Регистрация: 16.11.2009
Сообщений: 156
24.09.2010, 19:38 15
Цитата Сообщение от assch Посмотреть сообщение
ведь этот екзешник не вносит какие то изменения в систему (или я не прав)
Обычно эти сообщения винды навязывают когда ставишь какую нибудь не пондравившуюся ей программу (но та то хоть понятно ведь прога пытается записать какие то файлы в систему а здесь почему ?)
Никаких изменений в системе нет. Все функции винапи сводятся к открытию файла, чтению\записи, выделение памяти в куче и пауза. В варианте со счетчиком еще установка приоритета трэда.

Цитата Сообщение от assch Посмотреть сообщение
Ну и ради интереса хотел бы знать какими алгоритмами работают эти программы типа DiffText
Кстати этот алгоритм Diff обсуждается по этой ссылке
http://ru.wikipedia.org/wiki/Diff
Инетересно, посмотрим что можно сделать...

Цитата Сообщение от assch Посмотреть сообщение
Алгоритм там у меня такой:
Из двух файлов создаются два масива
Потом из первого (старого) масива берётся первая строчка и парсингом ищется во втором масиве
как только находит совпадение она удаляет эту строчку из второго масива
потом переходит на вторую строчку первого масива и также ищет если не находит то просто
переходит на следующую строчку первого масива
Тоесть все строчки что были в первом масиве она удаляет во втором масиве
ну и остатки второго масива записывает в файл отчёта
Такой алгоритм требует много обращений к памяти на удаление\перезапись. Обращение к памяти стоит дорого в плане времени на исполнение. За одно подобное действие можно выполнить 30-50 сложений\вычитаний. По этой причине у меня в процедуре столько жонглирования регистрами: я не хотел делать локальные переменные. На 64битном процессоре с его дополнительными регистрами, можно еще лучше сделать.
1
3 / 3 / 0
Регистрация: 13.09.2010
Сообщений: 46
24.09.2010, 20:12  [ТС] 16
Насчёт моего алгоритма вы правы ,слишком перегружен.
У меня есть исходник программы WinDiff написанный на С.
Только как оттуда вытащить эту функцию не знаю.
Вложения
Тип файла: rar WD.rar (149.3 Кб, 25 просмотров)
0
3 / 3 / 0
Регистрация: 13.09.2010
Сообщений: 46
24.09.2010, 20:36  [ТС] 17
Кстати вы наверное знаете что есть командная функция Виндов
fc 1.txt 2.txt >3.txt
Она тоже прекрасно и мнгновенно ищет изменения.
В файле отчёта она выводит и добавленные строки и удалённые строки.
файл отчёта у неё несколько мудрённый, но главное она работает.
В принципи не плохо ,создал батник написал там эту команду и всё.
Плохо только то что для больших изменений она не подходит
файл отчёта она создаёт не больше 64кб (наследие досовских времён)
0
3 / 3 / 0
Регистрация: 13.09.2010
Сообщений: 46
29.09.2010, 04:31  [ТС] 18
Скачал Фасм поставил и хотел скомпилировать ваш скрипт (чтобы поэксперементировать)
но увы Фасм мне выдал ошибку Самое интересное что в папке Фасма лежит папка EXAMPLES
в ней примеры так вот я взял самый простой HELLO.ASM рядом с ним был уже откомпилированный экзешник который запускался всё нормально Но когда я этот файл (его родной) ради интереса
вставил в Фасм (думая что Фасм не принимает только ваш код) то он тоже не скомпилировал его
и выдал туже ошибку Не подскажете почему Скриншот ошибки в файле 1.JPG
Миниатюры
Сравнить два текстовых файла  
0
3 / 3 / 0
Регистрация: 13.09.2010
Сообщений: 46
29.09.2010, 05:10  [ТС] 19
Кажется разобрался
Надо было файл вставить в папку INCLUDE и там с ним работать
Как говорится век живи век учись
0
0 / 0 / 0
Регистрация: 28.01.2011
Сообщений: 21
25.12.2011, 13:51 20
А может кто-нибудь добавить комментарии к этой программе? Хочу в ней разобраться, но без комментариев очень сложно...
0
25.12.2011, 13:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.12.2011, 13:51
Помогаю со студенческими работами здесь

Сравнить поэлементно два массива и записать максимальный элемент из каждой пары в третий массив
Доброго времени суток! Я пишу программу на С++, у меня есть 3 массива: 2 исходных и 1...

Эмуляция сравнения двух чисел или как сравнить два qword x32 cmp?
Всем привет. Столкнулся с такой проблемой: в цпп коде нужно сравнить два числа при помощи...

Даны два массива. Найти среднее арифметическое элементов каждого и сравнить эти значения
4. Даны два массива. Найти среднее арифметическое элементов каждого и сравнить эти значения.

Работа с массивами (сравнить два числа)
Даны два одномерных массива одинаковой размерности. Массивы заполнить случайными числами....


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru