Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

сравнение двух произвольных файлов [D7, XP]


Страницы:   1 2

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;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо