![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск в бинарном файле [D5, WinXP]
Dimaxx © (2004-09-24 23:32:00)
Страницы: < 1 2 ... 5 6 7 8 9 10 11 12 13 14
Сабж. Нужен алгоритм действительно быстрого поиска последовательности байт любой длины в файлах любого размера (до гигабайта). Читать кусками по-деревенски не катит. Раньше у меня был алгоритм, но с падением Фуджика все пропало.
Defunct (2004-09-25 01:47:00) [261]А где же там по-деревенски?
По-деревенски это будет примерно так:
S - строка поиска
S2 - буфер
Pos - позиция в файле
1. Pos := 0;
2. Seek(F, Pos)
3. считать в S2 Length(S) символов
4. Pos := Pos + 1;
5. S2=S - выход с результатом True
6. Pos + Length(S) < FileSize(F) - да GOTO 2
7. выход с результатом False
GuAV (2004-09-25 01:37:00) [262]
> 1. Создать буфер 1Mb или больше как вам нравится
Сказали же
> Читать кусками по-деревенски не катит.
Хотя как без этого... ну низнаю :(
Defunct (2004-09-25 01:36:00) [263][1] Алгоритм конечно же нуждается в поправках, но общий смысл такой.
Defunct (2004-09-25 01:33:00) [264]S - строка поиска
I - текущий номер символа в строку поиска.
1. I := 1;
1. Создать буфер 1Mb или больше как вам нравится
2. Считать очередную порцию данных из файла.
3. Пока не вышли за границы буфера : Бежать по буферу в поисках S[1]
иначе - GOTO 7
4. Если нашли символ S[1] в буфере: тогда
For I:=2 to Length(S) do <сравниваем отсальные символы>
5. Совпадение - выход с результатом True
6. GOTO 3
7. Файл не закончился - GOTO 2
8. Выход с результатом False