![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
сравнение двух произвольных файлов [D7, XP]
romario © (2010-05-03 12:16:00)Программа должна сравнивать два файла и формировать текстовый файл найденных о-личий.
Файлы сравниваются побайтно. Если два соответствующих байта не совпадают, то в вы-ходной файл выводится текстовая строка, содержащая адрес, а также значения байтов из обоих файлов в 16-ричном, десятичном и в символьном виде.
При различии размеров файлов пользователь выбирает из двух возможностей:
- не сравнивать файлы;
- сравнивать до конца более короткого файла, оставшийся остаток считать отличием и вывести в выходной файл.
Начало заложил :)
но вот "Если два соответствующих байта не совпадают, то в вы-ходной файл выводится текстовая строка, содержащая адрес, а также значения байтов из обоих файлов в 16-ричном, десятичном и в символьном виде." не могу найти как сделать???
procedure TForm1.Button1Click(Sender: TObject);
var
File1, File2: string;
S1, S2: TStream;
I, R: Integer;
buttonSelected : Integer;
Val1, Val2: Byte;
begin
File1:='d:\primer1.txt';
File2:='d:\primer2.txt';
S1 := TFileStream.Create(File1, fmOpenRead or fmShareDenyNone);
S2 := TFileStream.Create(File2, fmOpenRead or fmShareDenyNone);
R:= S1.Size;
if S1.Size <> S2.Size then
begin
buttonSelected := MessageDlg('Файлы отличаются по размеру!'+#13#10+
'Сравнивать до конца короткого файла?',mtCustom,[mbYes,mbNo], 0);
if buttonSelected = mrYes then
begin
if S1.Size > S2.Size then R:=S2.Size else R:=S1.Size
end;
if buttonSelected = mrNo then Exit;
end;
for I := 0 to R - 1 do
begin
S1.Position := I;
S1.Read(PByte(@Val1)^, SizeOf(Val1));
S2.Position := I;
S2.Read(PByte(@Val2)^, SizeOf(Val2));
if Val1 <> Val2 then
begin
ShowMessage(InttoStr(Val));
Break;
end;
end;
S1.Free;
S2.Free;
end;
romario (2010-05-03 12:58:00) [21]
> RWolf © (03.05.10 12:37) [3]
>
> Writeln(OutFile, IntToHex(Val1,2), ' ', Val1, Chr(Val1),
> ' ', IntToHex(Val2,2), ' ', Val2, Chr(Val2));
Спасибо реализовал
if Val1 <> Val2 then
begin
memo1.Lines.Add('16 - '+IntToHex(Val1,2)+' chr - '+ chr(val1)
+' - '+'16 - '+ IntToHex(Val2,2)+' chr - '+ chr(val2));
end;
Не уже нет перевода в десятичеую систему счисления???
romario (2010-05-03 12:39:00) [22]
> Игорь Шевченко © (03.05.10 12:35) [2]
>
> ты методичку прямо с переносами копируешь ?
да :)
могу исправить)
Программа должна сравнивать два файла и формировать текстовый файл найденных отличий.
Файлы сравниваются побайтно. Если два соответствующих байта не совпадают, то в выходной файл выводится текстовая строка, содержащая адрес, а также значения байтов из обоих файлов в 16-ричном, десятичном и в символьном виде.
При различии размеров файлов пользователь выбирает из двух возможностей:
- не сравнивать файлы;
- сравнивать до конца более короткого файла, оставшийся остаток считать отличием и вывести в выходной файл.
RWolf (2010-05-03 12:37:00) [23]Writeln(OutFile, IntToHex(Val1,2), ' ', Val1, Chr(Val1), ' ', IntToHex(Val2,2), ' ', Val2, Chr(Val2));
Игорь Шевченко (2010-05-03 12:35:00) [24]ты методичку прямо с переносами копируешь ?
romario (2010-05-03 12:17:00) [25]
begin
??????
end;