| 
| 
 | Вопрос # 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) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |