Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2011, 16:26   #1
Dima DDM
Форумчанин
 
Аватар для Dima DDM
 
Регистрация: 09.11.2010
Сообщений: 134
Восклицание Поиск в файлах папке

Скажите как найти текст (который например введен в Edit1) во всех файлах в данной папке(путь до папки Edit2 например ) и вывести номер строки в файле и найденное слово а так же имя файла в ListBox ???
http://ddmsite.ucoz.ru Мой сайт.
Бесплатный Блокировщик рекламы
http://download.adguard.ru/d/1656/adguardInstaller.exe
Dima DDM вне форума Ответить с цитированием
Старый 10.04.2011, 16:36   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Ну для начала перебор всех файлов в папке через TSearchRec(FinfFirst,FindNext,FindC lose), далее грузим файл в StringList а имя файла записываем в пременную и в цикле for..to..do по строчно ищем заданное слово, нашли? Молодца, имя файла из переменной+номер строки в которой нашли слово.
Нет? Break и к прыжок вк след. файлу.

Но у этого алгоритма есть минусы:
1. Медлительность.
2. Ну тут первого с головой достаточно.

Решением может стать, многопоточность поиска слова в 1 файле.
Человек_Борща вне форума Ответить с цитированием
Старый 11.04.2011, 22:47   #3
Dima DDM
Форумчанин
 
Аватар для Dima DDM
 
Регистрация: 09.11.2010
Сообщений: 134
По умолчанию

Вот в том то и проблема я не понимаю ВООБЩЕ как искать через TSearchRec
http://ddmsite.ucoz.ru Мой сайт.
Бесплатный Блокировщик рекламы
http://download.adguard.ru/d/1656/adguardInstaller.exe
Dima DDM вне форума Ответить с цитированием
Старый 12.04.2011, 12:53   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Код:
procedure Tmainsys.loadstorhdrs;
var 
sr : tsearchrec;
ms : TMemoryStream;
begin
ms := TMemoryStream.Create;
if findfirst(stordir + '*.' + storext, faanyfile, sr) = 0
  then repeat
    try
    ms.LoadFromFile(stordir+sr.Name); // fully relocates memory, thus reusing only 1 ms
    if ms.size = 0
      then if findnext(sr) = 0
        then continue
        else break;

    except

    end;
  until findnext(sr) <> 0 ;
freeandnil(ms);
findclose(sr.FindHandle); // release memory of tsearchrec
end;
Из реального проекта, процедура грузит заголовки файлов собственной структуры. На месте пробелов был рабочий код, он не относится к делу

советую почитать справку по tsearchrec findfirst findnext
phomm вне форума Ответить с цитированием
Старый 24.04.2011, 02:22   #5
kees
Пользователь
 
Регистрация: 17.04.2011
Сообщений: 10
По умолчанию

А может и мне подскажете, что у меня кроме мозгов не так?
Код:
procedure TForm1.ToolButton1Click(Sender: TObject);
var
ts: String;
fs: TSearchRec;
f:TextFile;
str:String;
n:Integer;

begin
if FindFirst(ProgramPath+'text\*.htm',faAnyFile,fs) = 0 then
  begin
  repeat
  ts := fs.Name;
      if (ts <> '0') then      // проверяем, есть ли ссылка на файл
     begin
     edit1.Text:=ts;
     WebBrowser1.Navigate(ProgramPath+'text\'+ts);   
  end;
until FindNext(fs) <> 0;
FindClose(fs);
ShowMessage('Поиск по курсу завершен');
end;
   end;
При нажатии на кнопку открывает мне 9.htm, но у меня 24 файла, по моим скромным соображениям он должен 1.htm открывать, или нет?
kees вне форума Ответить с цитированием
Старый 24.04.2011, 07:36   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

ts Вы туда заносите имя, а проверяет на символ нуля... по идее Вам надо проверять не путая ли строка , т.е. if ts <> '' // это апострофы а не кавычки
советую пройтись ещё трасировкой с проверкой значений (подсказка F7 и F4 наводите мышкой на значение) узнаете его прямо во время хода проги, поймете, есть ли косяк
phomm вне форума Ответить с цитированием
Старый 24.04.2011, 10:38   #7
kees
Пользователь
 
Регистрация: 17.04.2011
Сообщений: 10
По умолчанию

Спасибо, огромное! Поиск проходит сначала по файлам с единицей в начале 1, 10, 11 и тд, потом с двойкой 2, 20... теперь понятно почему открывает 9, он получается последний, значит вроде все корректно, теперь условия поиска нужно вставлять


Теперь на Reset(f) выдает File not found, хотя ts=1.htm

Последний раз редактировалось kees; 24.04.2011 в 11:36.
kees вне форума Ответить с цитированием
Старый 24.04.2011, 18:09   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Теперь на Reset(f) выдает File not found, хотя ts=1.htm
а ищите так?
Цитата:
Код:
if FindFirst(ProgramPath+'text\*.htm',faAnyFile,fs) = 0
тогда открывайте файл не ts
а,
Код:
AssignFile(f, ProgramPath+'text\'+ts);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.04.2011, 18:22   #9
kees
Пользователь
 
Регистрация: 17.04.2011
Сообщений: 10
По умолчанию

Теперь так и открываю, и без толку
Выдает I/O 104 и останавливается на while not EOF(f) do
Код:
if FindFirst(ProgramPath+'text\*.htm',faAnyFile,fs) = 0 then
  begin
  repeat

  ts:= fs.Name;

    begin
      if (ts <> ' ') then      // проверяем, есть ли ссылка на файл
     begin

      AssignFile(f,ProgramPath+'text\'+ts);     // открываем файл
      Reset(f, ProgramPath+'text\'+ts);
      while not EOF(f) do       // пока не конец файла
        begin
        Readln(f,str);          // считываем одну строку
        if pos(makemin(Edit1.Text),makemin(str))>0 then  // если находим в ней текст
            begin
             n:=n+1;
             nf:=nf+1;
            end;
         closefile(f);    // закрываем файл
    end;
   end;
  end;
   Break;
until FindNext(fs) <> 0;
FindClose(fs);
ShowMessage('Поиск по курсу завершен');
end;
kees вне форума Ответить с цитированием
Старый 24.04.2011, 18:26   #10
kees
Пользователь
 
Регистрация: 17.04.2011
Сообщений: 10
По умолчанию

Может кто нить потратит свое время за скромную мзду? мне очень надо и срочно
kees вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск текста в файлах Arassir Общие вопросы по программированию, компьютерный форум 5 08.04.2011 09:22
Поиск и замена в текстовых файлах akm-gala Помощь студентам 1 18.06.2010 09:08
Контекстный поиск в pdf-файлах за ДЕНЬГИ!!! Kot-Sarov Помощь студентам 0 30.05.2010 22:31
Win32 Api информация о файлах в папке noxin Помощь студентам 0 27.03.2010 18:49
Поиск одинаковых строк в файлах xls valeryana Microsoft Office Excel 10 22.09.2009 11:45