|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.07.2009, 16:51 | #1 |
Пользователь
Регистрация: 30.05.2008
Сообщений: 25
|
Поиск Hex данных в большом файл
Мне нужно найи определённую последовательность байтов в файле 30mb и узнать её адрес
Я намисал алгоритм, но оно мне искало гдето 1мин, и то эти байты ноходились на 1/5 файла, может подскажете как оптимизировать мне это Вот код: Код:
|
01.07.2009, 16:55 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Можно попробовать работу с TFileStream.
Или загружать с blockread поблочно в динамический массив размером 1/10 размера файла и в массиве уже искать
I'm learning to live...
|
02.07.2009, 16:42 | #3 |
Пользователь
Регистрация: 30.05.2008
Сообщений: 25
|
Я загрузил файл в память, оказалось что поиск идёт очень быстро, основное время уходит на занрузуку файла в память, это наверное из=за blockread(f,x,1); А как файл можно в масив побыстрее загрузить.
А всё, ну я и наморозил, сделал вот так blockread(f,fx,30146559); теперь вроде работает. Последний раз редактировалось GanGSISoft; 02.07.2009 в 17:12. |
02.07.2009, 20:23 | #4 |
Пользователь
Регистрация: 30.05.2008
Сообщений: 25
|
А может подскажете какой алгоритм поиска массива в массиве применять, а то мой(последовательность из n чисел сравнивается с всеми последовательностями из n чисел) чем длинее масив который нужно искть время увеличивется гораздо сильнее.
|
02.07.2009, 20:39 | #5 |
Особый статус
Участник клуба
Регистрация: 24.11.2008
Сообщений: 1,535
|
Ну да, так и надо — со ВСЕМИ. Только не весь массив сравнивай — а до первого несовпадения.
Например, найдем "XYZa" в алфавите: ABCDE...xyz. На 24-м сравнении найдётся! И потом ещё 28 холостых, а быстрее никак. Это же не бинарный поиск в упорядоченном файле! А если искомый массив не более 255 цифр, то его можно найти из окна поиска в Word. Word как-то очень быстро ищет! Ну не в 30 мегабайтах, но мегабайт по 10, думаю, осилит.
Формула 1 (календарь чемпионата-2016): 26.11.2016 15:55 — Абу-Даби: http://ru.wikipedia.org/wiki/Гран-при_Абу-Даби — (квалификация)! Эфир: http://lion-tv.com/28-match-tv.html
Последний раз редактировалось Sasha_Smirnov; 02.07.2009 в 20:59. |
02.07.2009, 22:38 | #6 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
а ещё есть такой алгоритм поиска, который называется быстрый поиск алгоритмом Бойера — Мура (the Boyer-Moore algorithm)
реализаций его полно, в том числе и для Pascal/Delphi... Там фишка в том, что чем длинее строка поиска, тем быстрее происходит поиск... рекомендую попробовать/потестировать... |
03.07.2009, 15:36 | #7 |
Пользователь
Регистрация: 30.05.2008
Сообщений: 25
|
Sasha_Smirnov, ну я так и сдлаю, у меня HEX ркдаутор ищет за доли секунды надпись вконце файла, а прога что-то дольше.
Serge_Bliznykov, интересно попробую. А где достать реализацию на Delphi. Только нормальную. Последний раз редактировалось GanGSISoft; 03.07.2009 в 15:58. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поиск данных в БД | sw47 | БД в Delphi | 15 | 08.12.2008 09:59 |
Загрузка и поиск в большом файле. | Алексей_M | Помощь студентам | 15 | 03.09.2008 10:49 |
как в Си прочитать ЕХЕ файл в HEX виде ?? | Юрий_BASE | Общие вопросы C/C++ | 1 | 18.04.2008 22:54 |
Крестики-нолики на большом поле Pascal | Juice | Помощь студентам | 14 | 16.04.2008 23:07 |
Поиск данных | aston | Microsoft Office Excel | 9 | 04.04.2008 16:30 |