Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.057 c
6-1219937720
Miraj
2008-08-28 19:35
2010.08.27
Как учитывать траффик в своей программе, только по одному порту


2-1267766469
lady
2010-03-05 08:21
2010.08.27
Как получить все вероятные значения Bin


2-1270195945
Lowlander
2010-04-02 12:12
2010.08.27
Маска ввода email


2-1273649711
@!!ex
2010-05-12 11:35
2010.08.27
Обработка сообщений в отдельном потоке.


15-1269273636
Правильный$Вася
2010-03-22 19:00
2010.08.27
многосессионный диск - копирование образа





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский