Форум: "Начинающим";
Текущий архив: 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