Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Процентное соотношение 
V
    Опции темы
Antony41
Дата 19.12.2009, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 27.12.2008

Репутация: нет
Всего: 1



Всем привет!
Хотелось бы узнать как можно сравнить два файла (по байтам) и сделать вывод, на сколько процентов один файл совпал с другим...
Хотя бы с чего начинать?
Как это можно организовать с потоками? и тот же вопрос, если файл больших размеров, 2,3,5 гб?

Примерно прикинул, думаю что нужно куда то писать, совпавшие байты, и не совпавшие, а потом посчитать и далее по формуле...?

Это сообщение отредактировал(а) Antony41 - 19.12.2009, 01:54
PM MAIL   Вверх
Демо
Дата 19.12.2009, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 6
Всего: 50



Проблема в том, чтобы прочитать файл? Или в чём?


--------------------
    
PM MAIL ICQ Skype   Вверх
~FoX~
Дата 19.12.2009, 02:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 0
Всего: 68



А файлы какого то формата или просто набор битов? А файлы одинаковые по размеру или может быть ситуация при которой первый фал размером в гиг может полностью включать в себя файл размером в пол гига? 
Файлы размером больше 2 гиг придется резать... Тяжело адресовать смещение на 2^31


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Antony41
Дата 19.12.2009, 02:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 27.12.2008

Репутация: нет
Всего: 1



Проблема в том, куда записывать совпавшие байты и не совпавшие

Добавлено @ 02:35
Файлы любого формата, независимо, файлы могут быть разным размером, да может быть и такое что пол гига и гиг.
Ну я думаю можно обойтись и без резания, мне кажется что для сравнения, можно будет использовать до двух тоесть если первый файл будет размером 3 гб, а второй 5, то я думаю сравнить 2 гига вполне хватит, а остальное просто отрубить)))

Основная проблема в том, что придётся сравнивать большое количество файлов, например до 7 - 8 тыс. то есть если например в списке будет 7000 файлов, то эту процедуру придётся выполнять 24 496 500 раз.

Это сообщение отредактировал(а) Antony41 - 19.12.2009, 02:44
PM MAIL   Вверх
~FoX~
Дата 19.12.2009, 03:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 0
Всего: 68



Antony41, Не очень понятно, есть файл с содержимым - 0123 и есть файл - 123 если сравнить их побитово то совпадений не будет... Чтобы узнать совпадения нужно сравнивать какой то средний показатель... Например представить файл в битовой маски и сравнивать спектр участка, или использовать вейлветы или другой какой нибудь критерий.... С коэффициентами... Копать нужно в сторону алгоритмов сжатия и оптимизированного статистического анализа... Иначе анализ 7000 файлов с возможностями присутствия в каждом из каждых последовательностей превращается в задачу по распределенным вычислениям и займет оооочень много времени...


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Antony41
Дата 19.12.2009, 03:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 27.12.2008

Репутация: нет
Всего: 1



Вот и я всё это понимаю, но теоретически то это возможно... Сейчас буду думать
Цитата

представить файл в битовой маски и сравнивать спектр участка, или использовать вейлветы или другой какой нибудь критерий.... С коэффициентами...

Работаю сейчас с таким алгоритмом, он в принципе работает нормально, но иногда его можно и обмануть))
Спасибо Fox сейчас буду что нибудь думать. Еще отпишусь в этом разделе...
PM MAIL   Вверх
Antony41
Дата 19.12.2009, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 27.12.2008

Репутация: нет
Всего: 1



в принципе всё ясно! пытался, но толком ни чего не вышло использую пока функцию не точного сравнения участков
примерно так
Код

var
  F1,F2:TFileStream;
  i:longint;
  CutZone, FOutPos:LongInt;
  Buff1,Buff2:PByteArray;
  tmpFtrPos:integer;
  FStrSub, FStrBuff1:String;
begin
{...}
      GetMem(Buff1,tmpFTRPOS);
      GetMem(Buff2,tmpFTRPOS);

      CutZone:=F1.Size-F2.Size;
      F1.Position:=Trunc((f1.Size-CutZone)/2);
      FOutPos:=F1.Size-CutZone-F1.Position;
      F2.Seek(-FOutPos, soFromEnd);

      if tmpFTRPOS>FOutPos then
        tmpFTRPOS:=FOutPos;
      F1.Read(Buff1^,tmpFTRPOS);
      F2.Read(Buff2^,tmpFTRPOS);

      for I := 0 to tmpFTRPOS do
        FStrBuff1:=FStrBuff1+IntToStr(Buff1^[i]);
      for I := Trunc(tmpFTRPOS/3) to tmpFTRPOS-Trunc(tmpFTRPOS/3) do
        FStrSub:=FStrSub+IntToStr(Buff2^[i]);

      if AnsiPos(FStrSub, FStrBuff1)<>0 then
        Result:=True;

      F1.Free;
      F2.Free;
      FreeMem(Buff1,tmpFTRPOS);
      FreeMem(Buff2,tmpFTRPOS);
{...}
end;


Как можно ускорить эту функцию?

Это сообщение отредактировал(а) Antony41 - 19.12.2009, 08:38
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0686 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.