Поиск в файлах

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Поиск в файлах

Сообщение Alex_Gordon1 » 21.02.2011 20:22:45

Потребовалось написать поиск строки в файлах.
Вот мой код:
Код: Выделить всё
  for z:=0 to ListBox1.Items.Count-1 do begin
  Memo9.Lines.LoadFromFile(extractfilepath(Label1.Caption)+'cl_dll\'+AnsiReplaceText(ListBox1.Items[z], '"', ''));
  if pos(Edit1.Text,SynMemo1.Lines.Text) <> 0 then begin
     Memo8.Lines.Add(ListBox1.Items[z]);
  end;
  end;

в ЛистБоксе хранится список файлов.
Проблема в том, что записывает в Мемо8 имена всех файлов, а не только тех, в которых содержится искомая строка. В чем дело?
Alex_Gordon1
новенький
 
Сообщения: 18
Зарегистрирован: 09.02.2011 20:41:12

Re: Поиск в файлах

Сообщение WindOfPain » 21.02.2011 21:47:41

А как Memo9, в котором содержимое файла, связано с SynMemo1, в котором производится поиск вхождения строки?

Для данного кода, что бы в Memo8 попадал полный список файлов, достаточно в SynMemo1 внести искомую строку. Что бы не попадали, вместо SynMemo1 использовать Memo9, либо обновлять SynMemo1 содержимым Memo9, когда происходит считывание очередного файла. Или я что-то упускаю из вида.
Аватара пользователя
WindOfPain
новенький
 
Сообщения: 33
Зарегистрирован: 01.09.2009 21:18:23
Откуда: Санкт-Петербург

Re: Поиск в файлах

Сообщение Alex_Gordon1 » 21.02.2011 22:26:07

От я дурень старой, голова с дырой!)
А как бы еще сделать, чтобы приписывался номер строки, в которой содержится искомый текст?
Alex_Gordon1
новенький
 
Сообщения: 18
Зарегистрирован: 09.02.2011 20:41:12

Re: Поиск в файлах

Сообщение WindOfPain » 21.02.2011 22:40:19

Ищи по строкам, перебирая Memo9.Lines, как массив строк, а не во всем тексте (Memo9.Lines.Text)

Код: Выделить всё
for i:= 0 to Memo9.Lines.Count - 1 do
if pos(Edit1.Text , Memo9.Lines[i])<>0 then break;


В результате, i содержит первую строку в которой обнаружилось вхождение подстроки. Далее просто

Код: Выделить всё
Memo8.Lines.Add(ListBox1.Items[z]+'   вхождение "'+Edit1.Text+'" в строке '+IntToStr(i));


Отследить все вхождения подстроки в файл можно похожим образом
Аватара пользователя
WindOfPain
новенький
 
Сообщения: 33
Зарегистрирован: 01.09.2009 21:18:23
Откуда: Санкт-Петербург


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 42

Рейтинг@Mail.ru