Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.03.2009, 02:25
"Hatchet" Harry "Hatchet" Harry вне форума
Прохожий
 
Регистрация: 22.03.2009
Сообщения: 30
Репутация: 10
Смущение Поисковик

Приветствую! Помогите мне, плиз... Такая задачка [Delphi7]:
Есть папка с файлами, все они текстовые(.txt) и состоят из коротких строк. Нужно искать во всех файлах определенное слово и если оно есть в файле то копировать всю строку (которая содержит искомое слово) в отдельный текстовый файл в той же папке.
Как можно\лучше всё это реализовать, где об этом почитать (на великом и могучем желательно!). Хочу посмотреть на норм алгоритм более-менее оптимизированный. Может какие-нить компоненты для этого специальные есть? Звиняйте за нубство, Дельфи для себя открыл совсем недавно, а это мне необходимо понять именно сейчас...
PS: Поиском ничего похожего не нашел.
Ответить с цитированием
  #2  
Старый 22.03.2009, 03:23
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Простой вариант - загрузка файлов в память (TStringList) и далее работа с данными в памяти. Все остальные варианты в силу объема твоего опыта нецелесообразны. Я в свое время сделал на следующем алгоритме:
-читаем файл блоками.
-поиск идет сначала по 1-му символу строки
-если символы совпадают, то проверяется второй символ.
-если и второй символ совпадает, то вот тогда происходит сравнение всего шаблона.
По поводу копирования строки, то тебе понадобится поиск вперед и назад до символов конца строки, а определив "координаты" этих символов, копировать нужную строку.
Ответить с цитированием
  #3  
Старый 22.03.2009, 10:45
Аватар для :S.p.a.m.
:S.p.a.m. :S.p.a.m. вне форума
Активный
 
Регистрация: 04.05.2008
Сообщения: 260
Репутация: 15
По умолчанию

имена файлов то извесны?
Ответить с цитированием
  #4  
Старый 22.03.2009, 12:35
"Hatchet" Harry "Hatchet" Harry вне форума
Прохожий
 
Регистрация: 22.03.2009
Сообщения: 30
Репутация: 10
По умолчанию

Цитата:
Сообщение от :S.p.a.m.
имена файлов то извесны?
Да, имеется текстовый файл в котором каждая строка = имя файла без расширения (.txt)
lmikle, т.е., если я правильно понял, то нечто вроде этого Только еще туда копирование строки, в которой нашлось слово прикрутить?
Ответить с цитированием
  #5  
Старый 22.03.2009, 13:19
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Если я правильно понял:

Код:
{FileName - файл в котором имена файлов}
{SubStr - искомая строка}
{предполагается, что файлы лежат в той же папке, где и FileName}
procedure SearchText(FileName, SubStr: string);
var
 i: integer;
 Path, CurrentFile: string;
 S: string;
begin
 Path := ExtractFilePath(FileName); //Путь к файлам
 Files := TStringList.Create;       //Список файлов в паке
 List  := TStringList.Create;       //Там будут строки
try
 Files.LoadFromFile(FileName);
 for i := 0 to Files.Count - 1 do begin
  CurrentFile := Path + Files.Strings[i] + '.txt';
  if FileExists(CurrentFile) = true then begin
   AssignFile(input, CurrentFile);
   Reset(input);
   while not eof(input) do begin
    Readln(S);
    if Pos(SubStr, S) > 0 then List.Add(S);
   end;
   CloseFile(input);
  end;
 end;
List.SaveToFile(Path + 'List.txt');
except
 List.Free;
 Files.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 SearchText('E:\1\Files.txt', 'aaa');
end;
Ответить с цитированием
  #6  
Старый 22.03.2009, 14:12
"Hatchet" Harry "Hatchet" Harry вне форума
Прохожий
 
Регистрация: 22.03.2009
Сообщения: 30
Репутация: 10
Хорошо

ART, СПАСИБО!
Именно то что нужно. Проверил в работе - всё ок ищется и копируется как нужно.(только сначало не хотело компилиться из-за необъявленных переменных, добавил в var
PHP код:
Files, List : TStringList

и всё стало норм, - откомпилилось (ты, видать, просто забыл объявить)
Теперь буду изучать твой алг. ибо хочу понять как это работает (Да, и спасибо за оставленные комменты, так легче понимается! )
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:46.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter