Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

сравнение двух произвольных файлов   Найти похожие ветки 

 
romario ©   (2010-05-03 12:16) [0]

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

begin
     ??????
   end;


 
Игорь Шевченко ©   (2010-05-03 12:35) [2]

ты методичку прямо с переносами копируешь ?


 
RWolf ©   (2010-05-03 12:37) [3]

Writeln(OutFile, IntToHex(Val1,2), " ", Val1, Chr(Val1), "  ", IntToHex(Val2,2), " ", Val2, Chr(Val2));


 
romario ©   (2010-05-03 12:39) [4]


> Игорь Шевченко ©   (03.05.10 12:35) [2]
>
> ты методичку прямо с переносами копируешь ?

да :)
могу исправить)
Программа должна сравнивать два файла и формировать текстовый файл найденных отличий.
Файлы сравниваются побайтно. Если два соответствующих байта не совпадают, то в выходной файл выводится текстовая строка, содержащая адрес, а также значения байтов из обоих файлов в 16-ричном, десятичном и в символьном виде.
При различии размеров файлов пользователь выбирает из двух возможностей:
- не сравнивать файлы;
- сравнивать до конца более короткого файла, оставшийся остаток считать отличием и вывести в выходной файл.


 
romario ©   (2010-05-03 12:58) [5]


> 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 13:18) [6]

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


 
RWolf ©   (2010-05-03 14:48) [7]

IntToStr.


 
Демо ©   (2010-05-03 16:22) [8]


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


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

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


 
romario ©   (2010-05-03 16:26) [9]


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

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


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

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


 
romario ©   (2010-05-03 16:28) [11]

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


 
Anatoly Podgoretsky ©   (2010-05-03 16:33) [12]

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

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


 
romario ©   (2010-05-03 16:41) [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:57) [14]

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

Адрес = Position


 
romario ©   (2010-05-03 17:02) [15]


> 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;
...


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


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

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


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

команда fc


 
romario ©   (2010-05-03 19:16) [18]


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

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


 
Anatoly Podgoretsky ©   (2010-05-03 21:26) [19]

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

32 бита


 
Anatoly Podgoretsky ©   (2010-05-03 21:26) [20]

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

В HEX


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


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

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


 
romario ©   (2010-05-04 11:56) [22]


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

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


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


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

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


 
Sha ©   (2010-05-05 09:51) [24]

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


 
romario ©   (2010-05-06 18:53) [25]

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

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.046 c
11-1221509060
tsugi
2008-09-16 00:04
2010.08.27
D2009


2-1270446256
oleg1963lora
2010-04-05 09:44
2010.08.27
Вычитение даты-времени


4-1231600539
Nucer
2009-01-10 18:15
2010.08.27
LSP (Layered Service Provider)


6-1218297048
woojin
2008-08-09 19:50
2010.08.27
script в HTML


15-1261482460
Piter
2009-12-22 14:47
2010.08.27
Win32/Kryptik троян подцепил