|
Вопрос # 587/ вопрос решён / |
|
Здравствуйте, уважаемые эксперты! Мне нужна "имитация поиска по базе". Есть .txt файл, со строками. Надо чтобы при вводе какого-ть текста или слова программа осуществляла поиск в каждой строке, если успешно, то выдавала строку полностью, в которой нашла слово. Заранее спасибо.
 |
Вопрос задал: Phoenix (статус: Посетитель)
Вопрос отправлен: 21 мая 2007, 13:34
Состояние вопроса: решён, ответов: 2.
|
Ответ #1. Отвечает эксперт: Косолапов Дмитрий Юрьевич
Здравствуйте, Phoenix!
Удобно использовать класс TStringList. Примерный код процедуры - в приложении (результат выводится в Memo1)
Приложение: Переключить в обычный режим- procedure TForm1.Button1Click(Sender: TObject);
- var sl:TStringList;
- i:integer;
- begin
- sl:=TStringList.Create;
- Memo1.Clear;
- sl.LoadFromFile('yourfile.txt');
- for i:=0 to sl.Count-1 do
-
- Memo1.Lines.Add(sl[i]);
- sl.Free;
- end;
 |
Ответ отправил: Косолапов Дмитрий Юрьевич (статус: 8-ой класс)
Время отправки: 21 мая 2007, 14:11
Оценка за ответ: 5
Комментарий к оценке: отлично
|
Ответ #2. Отвечает эксперт: min@y™
Хочу дополнить предыдущий ответ функцией поиска БЕЗ учёта регистра символов, возвращающей количество найденных строк.
Приложение: Переключить в обычный режим- function FindText(const Text, FileName: string): Integer;
- var
- List: TStringList;
- Index: Integer;
- LowerText: string;
- begin
- Result:= 0;
- Memo.Lines.Clear;
- LowerText:= AnsiLowerCase(Text);
- List: TStringList.Create;
-
- try
- try
- List.LoadFromFile(FileName);
-
- for Index:= 0 to List.Count - 1 do
- begin
- if Pos(LowerText, AnsiLowerText(List[Index])) <> 0
- then begin
- Memo.Lines.Add(List[Index]);
- Inc(Result);
- end;
-
-
-
-
- ProgressBar.Position:= Round(100 * (Index + 1) / List.Count);
- Application.ProcessMessages;}
- end;
- except
- Result:= -1;
-
-
- mb_Ok + mb_IconError);
- end;
- finally
- List.Free;
- end;
- end;
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 21 мая 2007, 16:55
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 21 мая 2007, 15:30; участников в обсуждении: 3.
|
Phoenix (статус: Посетитель), 21 мая 2007, 14:06 [#1]:
да и еще чуть не забыл, надо еще при успешном поиске выдавало все строки с совпадениями (или ограничено первые 10) ищо раз спасибо.
|
|
Venom (статус: 1-ый класс), 21 мая 2007, 14:45 [#2]:
Добрый день, Phoenix.
Можно и вот так, по старинке:
var F:Text;
s:string;
begin
AssignFile(F,'путь к файлу');
Reset(F);
Memo1.Clear;
While not Eof(F)do
begin
ReadLn(F,s);
if Pos('искомая строка',s)>0 then
Memo1.Add(s);
end;
CloseFile(F);
end;
|
|
Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 21 мая 2007, 15:24 [#3]:
Ну, чтобы ограничить первыми 10-ю, можно простую проверку в цикле сделать...
|
|
Phoenix (статус: Посетитель), 21 мая 2007, 15:30 [#4]:
спасибо большое, сразу же догадался
|
31 января 2011, 19:27: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|