![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск в файле (быстрый) [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]Отсортировать список и применить бинарный поиск