Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2010, 12:29   #1
rem2010
Новичок
Джуниор
 
Регистрация: 27.04.2010
Сообщений: 2
По умолчанию Сравнение двух произвольных файлов

Программа должна сравнивать два файла и формировать текстовый файл найденных о-личий.
Файлы сравниваются побайтно. Если два соответствующих байта не совпадают, то в вы-ходной файл выводится текстовая строка, содержащая адрес, а также значения байтов из обоих файлов в 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
      ?????
    end;
  end;

  S1.Free;
  S2.Free;
end;

Последний раз редактировалось Stilet; 03.05.2010 в 13:17.
rem2010 вне форума Ответить с цитированием
Старый 03.05.2010, 12:38   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

IntToHex, IntToStr, Char...
BOBAH13 вне форума Ответить с цитированием
Старый 03.05.2010, 13:21   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Дополню Вову кодом:
Код:
    
if Val1 <> Val2 then
    begin
      Writeln(f,'позиция=',S1.Position:10,'Байты ',format('%x и %x',[Val1,val2]);
    end;
Где f - Textfile
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение двух файлов Excel (поячеечно) для выявления отличий IEEE Microsoft Office Excel 8 21.04.2010 15:45
сравнение двух строк aza_kaz Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 01.01.2010 23:40
Сравнение двух таблиц scaramangi Microsoft Office Excel 0 17.09.2009 17:15
сравнение двух фаилов al508 Microsoft Office Excel 4 24.06.2009 07:55
сравнение двух баз. Layk Microsoft Office Access 2 04.06.2009 23:37