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

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

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

Ответить
Alex_Gordon1
новенький
Сообщения: 18
Зарегистрирован: 09.02.2011 19:41:12

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

Сообщение Alex_Gordon1 »

Потребовалось написать поиск строки в файлах.
Вот мой код:

Код: Выделить всё

  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 имена всех файлов, а не только тех, в которых содержится искомая строка. В чем дело?
Аватара пользователя
WindOfPain
новенький
Сообщения: 33
Зарегистрирован: 01.09.2009 21:18:23
Откуда: Санкт-Петербург

Сообщение WindOfPain »

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

Для данного кода, что бы в Memo8 попадал полный список файлов, достаточно в SynMemo1 внести искомую строку. Что бы не попадали, вместо SynMemo1 использовать Memo9, либо обновлять SynMemo1 содержимым Memo9, когда происходит считывание очередного файла. Или я что-то упускаю из вида.
Alex_Gordon1
новенький
Сообщения: 18
Зарегистрирован: 09.02.2011 19:41:12

Сообщение Alex_Gordon1 »

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

Сообщение WindOfPain »

Ищи по строкам, перебирая 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));


Отследить все вхождения подстроки в файл можно похожим образом
Ответить