Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск в файле (быстрый) [D7, WinXP]


Knop ©   (2005-07-26 06:47:00) 

Здравствуйте уважаемые мастера.
Я как-то видел подобную тему, но сейчас не смог её найтии поэтому обращаюсь к вам. Задача примерно такая: WordsStringList содержит слова (в каждой строке одно слово) или обрывки слов (например соба) и имеется файл. В этом файле необходимо произвести поиск этих слов/обрывков слов (если в файле есть все слова, то True).
Я делаю примерно так: загружаю файл в FileStringList и сравниваю все строки файл pos'ом с первой строкой WordsStringList, потом со второй и т.д. если слово/его часть присутствует в WordsStringList, то result:=True, иначе result:=False и exit
Но нужен более быстрый способ.


Knop   (2005-07-27 14:22:00) [1]

Почему так? Никто не знает?


Knop   (2005-07-27 06:50:00) [2]

Странно. Если искать слово так:
if pos(LowerCase(SearchString), LowerCase(k.Text)) > 0 then
ищет нормально. А если так:
if pos(SearchString, k.Text) > 0 then
то ничего не находит
SearchString- строка, которую нужно найти в файле. В переменную kзагружен текст из файла
function LowerCase(s: string): string;
var
 i: integer;
begin
 result := s;
 for i := 1 to length(result) do
   if (result[i] in ['A'..'Z', 'А'..'Я']) then
     result[i] := chr(ord(result[i]) + 32);
end;


Anatoly Podgoretsky   (2005-07-26 13:45:00) [3]

Про свойство Text я писал?
А про загрузку в строку?


Anatoly Podgoretsky   (2005-07-26 13:43:00) [4]

Knop ©   (26.07.05 11:59) [6] Это я для облегчения восприятия назвал.

Ты добился обратной вещи.


Knop   (2005-07-26 12:09:00) [5]


> Грузить файл в StringGrid

Очепятался. StringList


Knop   (2005-07-26 11:59:00) [6]


> Не знаю, что за компонент такой FileStringList

Это я для облегчения восприятия назвал. FileStringList - стринглист, в котором хранятся строки из файла, WordsStringList - хранит слова.

> а еще лучше загрузить файл в строку

Это как? Грузить файл в StringGrid, а потом некой переменной s в цикле приплюсовывать строки? Так мне потом надо будет сохранить эту переменную в файл, а для этого опять разбивать настроки


Anatoly Podgoretsky   (2005-07-26 09:21:00) [7]

TUser ©   (26.07.05 07:41) [1]
Не пойдет, слова то неизвестны.

Knop ©   (26.07.05 06:47)  
Не знаю, что за компонент такой FileStringList, но может у него есть свойство Text, а еще лучше загрузить файл в строку, поменьше потребуется ресурсов и скорость самая максимальная.


Knop   (2005-07-26 08:03:00) [8]


> > если слово/его часть присутствует в WordsStringList,

правильнее будет так: если слово/его из WordsStringList присутствует в одной из строк FileStringList

> Какого размера файл?

Файлов много, но не думаю, что размер одного файа будет превышать 100 кб (html-страницы)

> Отсортировать список...

Какой именно? WordsStringList?

> ...и применить бинарный поиск

Пример можно?


Fay   (2005-07-26 07:50:00) [9]

2 Knop ©   (26.07.05 6:47)
> WordsStringList содержит слова (в каждой строке одно
> слово) или обрывки слов (например соба)


> если слово/его часть присутствует в WordsStringList,
> то result:=True,

Я что-то не врубаюсь. Ты ищешь вхождения в части слова? А нужно не наоборот?


Fay   (2005-07-26 07:46:00) [10]

2 Knop ©   (26.07.05 6:47)
Какого размера файл?


TUser   (2005-07-26 07:41:00) [11]

Отсортировать список и применить бинарный поиск


Наверх

Титульная страница Поиск, карта сайта Написать письмо