Поиск строки по всем файлам диска.

From
Alexander Andrusenko ()
To
All
Date
2002-10-23T15:44:47Z
Area
RU.ALGORITHMS
From: "Alexander Andrusenko" <andrews@ktm.kiev.ua>


Привет всем.

Да, я знаю, что большинство файловых менеджеров это позволяют, но хочу
написать для себя программу с расширенными возможностями поиска. При
написании столкнулся с проблемой, которая до этого казалась мне элементарной
вещью.

Как реализовать поиск строки в файле? Знаю несколько способов, но ни один из
них мне не нравится.

1. Переписать функцию strstr, сделав вместо обращений к памяти обращения к
файлу. Это даже способом называть стыдно - никакой буферизации, частое
обращение к диску, очень медленная работа...

2. Прочитать весь файл в буфер, и уже потом выполнять поиск. Это намного
лучше, но совершенно неприменимо для больших файлов.

3. Читать в буфер в цикле. Вроде бы то, что нужно, но... здесь вдруг вылазит
целая куча мелочей, в которых можно запутаться. Для наглядности примера
возьму строку, состояющую из n одинаковых символов, и буфер размером N>n.
При очередном чтении из файла выясняется, что содержимое буфера
заканчивается m теми же одинаковыми символами (m<n). И что делать дальше?

Лучшее, что я смог придумать в таком случае - это повторное чтение в буфер,
начиная с первого совпавшего символа. Вот только не уверен, что этот
способ - оптимальный. Кроме того, при такой реализации получается
ограничение на максимальный размер строки. И, кстати, каким в таком случае
будет оптимальное соотношение размеров буфера и строки?

Кто знает (или может предложить) лучший способ? Желательно, чтоб без
ограничения на размер строки (которая тоже будет читаться из файла).




--- ifmail v.2.15dev5
 * Origin: Volia ISP (2:5020/400)