Поиск в файле

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Поиск в файле

Сообщение |kerish| » 07.09.2005 (Ср) 12:53

Если я ещё никого не задрал, то задам вопрос.
Существует файл и массив с кучей элементов текста.
Как по-быстрее проверить встречается ли в файле любой из элементов текста из этого массива, но чтобы не умереть от старости, так как файлов будет проверятся много.
Я реализовал это, но с жутко медленной скоростью.
Элементов в массиве - 1700.
Файл 700 Kb, проверка этого файла идёт 15-20 секунд.

Может есть какая-то хитрость, как сделать по-быстрее?
Ведь например тот же Касперский, имея огромные массивы сигнатур умудряется проверять файлы с огромной скоростью.
Как он это делает?

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 07.09.2005 (Ср) 13:00

А каким алгоритмом ты сейчас проверяешь?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 07.09.2005 (Ср) 13:06

InStr по файлу считанному в строку пробовал?

А AVP... Может он смотрит уже по определенным местам файла - оно быстрей все-же...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 07.09.2005 (Ср) 13:07

Кстати, а кто-нибудь что-нибудь знает про InStr? Каким алгоритмом он ищет, достаточно ли быстрый etc.?

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Сообщение |kerish| » 07.09.2005 (Ср) 13:32

Сейчас проверяю обычным InStr-ом.
Ещё раз повторю, что файл в 700 Kb и база в 1700 записей InStr ищет секунд 10-15...у AVP похожий алгоритм поиска, но всё работает реактивно.
P.S. Нет AVP точно не смотрит по определенным местам.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 07.09.2005 (Ср) 14:12

|kerish| писал(а):Нет AVP точно не смотрит по определенным местам.


Но может использовать бинарный поиск (опция у того-же InStr - побыстрей должен быть), поиск по определенным образом вычисляемому смещению - я не думаю что он все файлы целиком просматривает...

Вообще чудес не бывает - файл-ы то довольно большие...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 07.09.2005 (Ср) 14:26

Ну, тогда тебе сюда:

http://algolist.manual.ru/search/esearch/

ЗЫ Если реализуешь какой-нибудь алгоритм, скажи - быстрее он InStr или нет. Мне уже интересно :)

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 08.09.2005 (Чт) 3:49

Про быстроту InStr() есть статья даже на ВБстреетс :) . ИМХО если надо сравнивать элементы массива, то можно их загнать в рекордсет и эскуэлем их...

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Сообщение |kerish| » 08.09.2005 (Чт) 10:28

У меня такое чувство, что это глубокий секрет :(

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 08.09.2005 (Чт) 10:59

Matew:
Кхм... если ты о статье skiperski, то она несколько, кхм, наивная :)

|kerish|:
попробуй, правда, реализовать какой-нибудь алгоритм (Кнута-Морриса-Пратта, например, я его в школе писал, помню :) ). Они короткие, в худшем случае потратишь полчаса времени впустую (зато убедимся, что InStr работает быстрее :) ).


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 51

    TopList