Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.14;
Скачать: CL | DM;

Вниз

Поиск в файле (быстрый)   Найти похожие ветки 

 
Knop ©   (2005-07-26 06:47) [0]

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


 
TUser ©   (2005-07-26 07:41) [1]

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


 
Fay ©   (2005-07-26 07:46) [2]

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


 
Fay ©   (2005-07-26 07:50) [3]

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


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

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


 
Knop ©   (2005-07-26 08:03) [4]


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

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

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

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

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

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

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

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


 
Anatoly Podgoretsky ©   (2005-07-26 09:21) [5]

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

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


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


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

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

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

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


 
Knop ©   (2005-07-26 12:09) [7]


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

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


 
Anatoly Podgoretsky ©   (2005-07-26 13:43) [8]

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

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


 
Anatoly Podgoretsky ©   (2005-07-26 13:45) [9]

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


 
Knop ©   (2005-07-27 06:50) [10]

Странно. Если искать слово так:
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;


 
Knop ©   (2005-07-27 14:22) [11]

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



Страницы: 1 вся ветка

Текущий архив: 2005.08.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
4-1119342275
SamProf
2005-06-21 12:24
2005.08.14
По Handle получить класс


14-1121884467
Ломброзо
2005-07-20 22:34
2005.08.14
Кто в автокаде рубит...


8-1113065140
Comrade
2005-04-09 20:45
2005.08.14
Эквалайзер Звука


1-1122531474
Demidoff
2005-07-28 10:17
2005.08.14
Как добавить в memo строки из файла?


14-1122200731
P.N.P.
2005-07-24 14:25
2005.08.14
Работа операторов :))