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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с потоками 
:(
    Опции темы
Qu1nt
Дата 30.4.2009, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Две песни. Допустим размер первой 5 мб, второй - 1 мб. Очевидно, что сравнивать по-байтово не имеет смысла. А вот если разница в размере - пару килобайт, то мб имеет:
Код

  Equals := Abs(Size1 - Size2) < 32 * 1024; // погрешность 32 кб

Две идентичные песни. Разный битрейт. Без вариантов = )

Это сообщение отредактировал(а) Qu1nt - 30.4.2009, 17:53
PM MAIL   Вверх
Antony41
Дата 1.5.2009, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



обсолютно согласен! 
Код

   if fs1.Size-fs2.Size>200*1024 then
      begin
      //ShowMessage('Размер fs2 превышает допустимый (Пропускаем)');
      Result:=false;
      AssignedFree(fs1);
      AssignedFree(fs2);
      exit;
      end;

пока что наброски
у меня идёт проверка на размер и если  меньше 200 кб. 
А битрейт если разный, то это да вся структура меняется, остоётся только привести всё к одному битрету (Что займет много времени) или сравнить по заголовкам. но их может и не быть
PM MAIL   Вверх
MetalFan
Дата 1.5.2009, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(Antony41 @  1.5.2009,  09:29 Найти цитируемый пост)
остоётся только привести всё к одному битрету 

или сравнивать "расжатые" из мп3 данные.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
lukash256
Дата 7.5.2009, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 23.7.2007
Где: Гомель/Беларусь

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



Цитата(MetalFan @  1.5.2009,  20:32 Найти цитируемый пост)
или сравнивать "расжатые" из мп3 данные.

но не факт (точнее будет сказать ТОЧНО НЕТ) что расжатые данные с битрейта 32 и 196 будут одинаковы. да и сравнение таким способом затянется не на 10 часов а на 10 недель =), если совподений много. 
тему можно развить: есть кроме музыки ешчо и фильмы, картинки, архивы тож можно распоковать и проверить .... =)
имхо надо ешчораз подумать и может пользовать стандартный утиль comp.exe вызывать с нужными параметрами и ловить результаты ее работы.
PM MAIL ICQ   Вверх
Демо
Дата 7.5.2009, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Если уж нужно сравнивать содержимое каки-либо образом - получай из каждого файла сигнатуру минимального размера для сравнения, от неё CRC(или хэш), CRC пиши в отсортированный список.
На этом твои проблемы практически заканчиваются.


--------------------
    
PM MAIL ICQ Skype   Вверх
Antony41
Дата 12.6.2009, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



так и сделал

Добавлено через 22 секунды
на 7000 файлов 3 часа
PM MAIL   Вверх
Riply
Дата 12.6.2009, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 3
Всего: 32



Цитата(Antony41 @  12.6.2009,  14:34 Найти цитируемый пост)
на 7000 файлов 3 часа 


Неприлично много smile
Пересматривай алгоритм в корне.
Исходи из того, что можно улучшить на порядок, как минимум.
IMHO, разумеется smile
PM MAIL   Вверх
Antony41
Дата 13.6.2009, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

function TMyThread1.Test(File1, File2:string):bool;
   function FloatToInt(AReal:Real48):Integer;
   begin
      Result:=StrToInt(FloatToStr(Areal));
   end;
const
max=100000;
var
fs1,fs2:TFileStream;
BaitToBait, outpos, tr:integer;
i, Flst:integer;
FAddListBlocked:Boolean;
buff1: array[0..max] of integer;
buff2: array[0..max] of integer;
begin
  FAddListBlocked:=False;
outpos:=0;
BaitToBait:=0;
tr:=Form2.DubleFrm1.sTrackBar2.Position;


    for Flst := 0 to BlockedFilesList.Count-1 do
      if (AnsiSameText(File1, BlockedFilesList.Strings[Flst])
      or AnsiSameText(File2, BlockedFilesList.Strings[Flst])) then
        FAddListBlocked:=True;
      if not FAddListBlocked then
        begin
try
  fs1:=TFileStream.Create(File1, fmShareDenyNone);
  try
    fs2:=TFileStream.Create(File2, fmShareDenyNone);
  except
    Form1.sPanel2.Caption:='Файл: '+File2+' невозможно получить доступ.';
          BlockedFilesList.Add(File2);
          Inc(BlockedFilesCount);
    Result:=False;
    Exit;
  end;
except
  Form1.sPanel2.Caption:='Файл: '+File1+' невозможно получить доступ.';
          BlockedFilesList.Add(File1);
          Inc(BlockedFilesCount);
  Result:=False;
  Exit;
end;
if fs1.Size-fs2.Size>34*1024 then
   begin
   Result:=false;
   fs2.Free;
   fs1.Free;
   exit;
   end;
      try
      fs1.Position:=FloatToInt(Int(fs1.size/2));
      outpos:=fs1.Size-fs1.Position;
      if outpos>fs2.Size then
        begin
          Result:=False;
          AssignedFree(fs2);
          AssignedFree(fs1);
          Exit;
        end;
      fs2.Seek(-outpos, soFromEnd);
      if Form2.DubleFrm1.sTrackBar2.Position>outpos then
         tr:=outpos;
      except
      Result:=False;
      fs2.Free;
      fs1.Free;
      exit;
      end;

      try fs1.ReadBuffer(buff1[0],tr);
      except
      Result:=False;
      fs2.Free;
      fs1.Free;
      exit;
      end;

      try fs2.ReadBuffer(buff2[0],tr);
      except
      Result:=False;
      fs2.Free;
      fs1.Free;
      exit;
      end;

      Try
      Result:=CompareMem(@Buff1[0], @Buff2[0], tr);
      except
      Result:=False;
      fs2.Free;
      fs1.Free;
      exit;
      end;
fs2.Free;
fs1.Free;
end
  else
  Result:=False;
end;

конечно не знаю поймёте ли вы это=)
PM MAIL   Вверх
Riply
Дата 13.6.2009, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 3
Всего: 32



Цитата(Antony41 @  13.6.2009,  00:36 Найти цитируемый пост)
если сделать по другому алгоритм нарушается


То, что ты привел - не алгоритм, а ф-ия сравнения двух файлов (если я правильно поняла).
Для получения общего представления о задаче еще нужно:
1. Как ты получаешь список файлов, которые нужно сравнивать
2. Как ты по нему пробегаешь, вызывая эту ф-ию сравнения
3. Словесная постановка задачи (грубо говоря: ТЗ), ибо мы видим
    только твою инерпритацию, которая может оказаться не самой оптимальной.

P.S.
 Я не обещаю, что посмотрю - уж очень загружена.
 Но даже если мне не удасться вырвать кусочек времени, то посмотрят другие
 и покажут "узкие места" твоей реализации.

P.P.S.
 Трудно говорить, не видя общей картины, но твоя ф-ия сравнения мне очень не понравилась smile
PM MAIL   Вверх
Демо
Дата 14.6.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Ты б расписал - какие сравнения тебе последовательно нужно провести.


--------------------
    
PM MAIL ICQ Skype   Вверх
Beltar
Дата 14.6.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 3
Всего: 7



Есть такая софтина Image Dupless ЕМНИП называется, сравнивает картинки. Качество ее работы само собой ОЧЕНЬ далеко от совершенства.

Есть ли вообще алгоритм позволяющий сравнивать хотя бы wav-файлы?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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