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-06 18:53:00) [1]

Anatoly Podgoretsky ©   (05.05.10 09:00) [23]

> Это не бред!
> Отображение десятичного числа в шестнадцатеричной системе
> с минимальной шириной!

Это бред.
Во первых никакого отображения нет и в помине
и 1 это не с минимальной шириной.
Один случай на миллион, что тебе надо отображать полчисла

тут все четко и с примерами :)
http://www.delphisources.ru/pages/faq/faq_delphi_basics/IntToHex.php.html


Sha   (2010-05-05 09:51:00) [2]

http://transl-gunsmoker.blogspot.com/2009/08/blog-post_04.html


Anatoly Podgoretsky   (2010-05-05 09:00:00) [3]


> Это не бред!
> Отображение десятичного числа в шестнадцатеричной системе
> с минимальной шириной!

Это бред.
Во первых никакого отображения нет и в помине
и 1 это не с минимальной шириной.
Один случай на миллион, что тебе надо отображать полчисла


romario   (2010-05-04 11:56:00) [4]


> > romario ©   (03.05.10 17:02) [15]
>
> Второй параметр функции IntToHex равный 1 - это бред.

Это не бред!
Отображение десятичного числа в шестнадцатеричной системе с минимальной шириной!


Германн   (2010-05-04 01:28:00) [5]


> romario ©   (03.05.10 17:02) [15]

Второй параметр функции IntToHex равный 1 - это бред.


Anatoly Podgoretsky   (2010-05-03 21:26:00) [6]

> romario  (03.05.2010 17:02:15)  [15]

В HEX


Anatoly Podgoretsky   (2010-05-03 21:26:00) [7]

> romario  (03.05.2010 17:05:16)  [16]

32 бита


romario   (2010-05-03 19:16:00) [8]


> Правильный$Вася   (03.05.10 17:43) [17]
> команда fc

есть ещё и другие команды и программы..., суть вопроса не в этом...


Правильный$Вася   (2010-05-03 17:43:00) [9]

команда fc


romario   (2010-05-03 17:05:00) [10]

Т.е. адрес должен содержать восемь бит т.е. допустим 0000ААFF...


romario   (2010-05-03 17:02:00) [11]


> Anatoly Podgoretsky ©   (03.05.10 16:57) [14]
>
> > romario  (03.05.2010 16:41:13)  [13]
>
> Адрес = Position
>

Так???
...
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
      memo1.Lines.Add('File1:Адрес байта - ' + IntToStr(S1.Position) + #13#10
       +'Шестнадцатеричный вид: '+'"'+IntToHex(Val1,1)+'"'
       +', Десятичный вид: "'+Format('%u', [Val1])+'"'+ #13#10
       +'Символьный вид: '+ '"'+chr(val1)+'"'+ #13#10
       + 'File2: Адрес байта - ' + IntToStr(S2.Position) + #13#10
       +'Шестнадцатеричный вид: '+'"'+IntToHex(Val2,1)+'"'
       +', Десятичный вид: "'+Format('%u', [Val2])+'"'+ #13#10
       +'Символьный вид: '+ '"'+chr(val2)+'"'+ #13#10);
    end;
  end;
...


Но тогда другой вопрос в каком формате выводить адрес???


Anatoly Podgoretsky   (2010-05-03 16:57:00) [12]

> romario  (03.05.2010 16:41:13)  [13]

Адрес = Position


romario   (2010-05-03 16:41:00) [13]


> Anatoly Podgoretsky ©   (03.05.10 16:33) [12]
>
> > romario  (03.05.2010 16:28:11)  [11]
>
> Ни PositionЮ ни Seek выводом не занимаются.

не так спросил, как определить адрес не равных байтов в файле???


Anatoly Podgoretsky   (2010-05-03 16:33:00) [14]

> romario  (03.05.2010 16:28:11)  [11]

Ни PositionЮ ни Seek выводом не занимаются.


romario   (2010-05-03 16:28:00) [15]

А как вывести адрес ячейки через Position или Seek?


romario   (2010-05-03 16:27:00) [16]

если смотреть с физической точки зрения!


romario   (2010-05-03 16:26:00) [17]


> Демо ©   (03.05.10 16:22) [8]
>
>
> > romario ©   (03.05.10 12:16)
> > Программа должна сравнивать два файла и формировать текстовый
> > файл найденных о-личий.
>
>
> Такая ситуация:
> Второй файл отличается только тем, что в начало файла добавлен
> 1 лишний байт.
>
> Насколько отличаются эти два файла?

Полностью + 1 байт


Демо   (2010-05-03 16:22:00) [18]


> romario ©   (03.05.10 12:16) 
> Программа должна сравнивать два файла и формировать текстовый
> файл найденных о-личий.


Такая ситуация:
Второй файл отличается только тем, что в начало файла добавлен 1 лишний байт.

Насколько отличаются эти два файла?


RWolf   (2010-05-03 14:48:00) [19]

IntToStr.


romario   (2010-05-03 13:18:00) [20]

Есть! :)
Format('%u', [Val1])
все спасибо)


Страницы:   1 2

Наверх

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