Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > Delphi
Перезагрузить страницу Срочно нужна помощь от программистов-виртуозов или к ним относящимся
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Opossum Opossum вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 21.11.2009
По умолчанию Срочно нужна помощь от программистов-виртуозов или к ним относящимся - 21.11.2009, 19:24

Необходимо написать прогу :Поиск файлов с отображением первых n байтов выбранного пользователем файла, поиск по следующим критериям: вхождение определенного набора символов, имя, расширение файла, дата создания, модификации, минимальный и максимальный размер.
По имени и расширению я поиск сделала, а вот с остальным проблема.Помогите, пожалуйста
Ответить с цитированием
  (#2 (permalink)) Старый
AfIS AfIS вне форума
Member
 
Сообщений: 384
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.02.2005
По умолчанию 23.11.2009, 03:31

А как поиск по имени и расширению сделан? С пом. FindFirst, FindNext? С пом. этих функций можно легко по размеру и по дате создания поиск реализовать.
Ответить с цитированием
  (#3 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию 23.11.2009, 10:59

Цитата:
По имени и расширению я поиск сделала, а вот с остальным проблема.Помогите, пожалуйста
Попытки в студию.
Ответить с цитированием
  (#4 (permalink)) Старый
Opossum Opossum вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 21.11.2009
По умолчанию 23.11.2009, 20:01

Код:
{$R *.dfm}

var
   FileName: string;  // имя или маска искомого файла
   cDir: string;
   n: integer;       // кол-во файлов, удовлетворяющих запросу
   Size: Integer;
// поиск файла в текущем каталоге
procedure Find;
var
   SearchRec: TSearchRec; // информация о файле или каталоге
begin
   GetDir(0,cDir); // получить имя текущего каталога
   if cDir[length(cDir)] <> '\' then cDir := cDir+'\';

   if FindFirst(FileName, faAnyFile,SearchRec) = 0 then
       repeat
          if (SearchRec.Attr and faAnyFile) = SearchRec.Attr then
             begin
               Form1.Memo1.Lines.Add(cDir +  SearchRec.Name);
               n := n + 1;
             end;
        until FindNext(SearchRec) <> 0;

       // обработка подкаталогов текущего каталога

       
       if FindFirst('*', faAnyFile, SearchRec) = 0 then
          repeat
              if (SearchRec.Attr and faDirectory) = faDirectory then
                   
                    if SearchRec.Name[1] <> '.' then
                       begin
                         // Form1.Memo1.Lines.Add('>>>>'+SearchRec.Name);
                         ChDir(SearchRec.Name);// войти в каталог
                         Find; // выполнить поиск в подкаталоге
                         ChDir('..');// выйти из каталога
                         //Form1.Memo1.Lines.Add('<<<<'+SearchRec.Name);
                       end;
          until FindNext(SearchRec) <> 0;
end;
Ну, вот это..а с остальным какая-то лажа..
Ответить с цитированием
  (#5 (permalink)) Старый
AfIS AfIS вне форума
Member
 
Сообщений: 384
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.02.2005
По умолчанию 24.11.2009, 04:20

Мелкие замечания:
Вместо if cDir[length(cDir)] <> '\' then cDir := cDir+'\'; нужно использовать cDir := IncludeTrailingPathDelimiter(cDir); Фу-я сама проверит, есть ли в конце разделитель.
Чуть корректнее, понятнее if (SearchRec.Attr and faAnyFile) = SearchRec.Attr then написать как if faAnyFile in [SearchRec.Attr] then

Крупные замечания:
Код:
//Пользуйся, пожалуйста, оформлением в виде кода в постах, а не простым текстом выкладывай программу.
Ну и по теме:
SearchRec.Size - размер файла, в байтах. Элементарно реализовать сортировку по размеру.
Код:
if (SearchRec.Size >= MinSize) and (SearchRec.Size <= MaxSize) then
SearchRec.Time - временная метка файла. Но она в спец. формате. Преобразуется элементарно в TDateTime с пом. фу-и
FileDateToDateTime(FileDate: Integer): TDateTime
Переменные типа TDateTime - это обычные вещественные числа Double. Их можно просто сравнивать.
Пусть в Edit1 - начальная дата, в Edit2 - конечная.
Код:
var
  StartDate, EndDate, FileDate: TDateTime;
...
  StartDate := Edit1.Text;
  EndDate := Edit2.Text;
  FileDate := FileDateToDateTime(SearchRec.Time);
  if (FileDate >= StartDate) and (FileDate <= EndDate) then
....
Вот с вхождением чуть посложнее. Если тупо, то просто открываешь каждый файл и ищешь вхождение. Но это может быть избыточно. Можно, например, не искать в нетекстовых файлах, исключая их по расширению.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,264
Сказал(а) спасибо: 27
Поблагодарили 52 раз(а) в 52 сообщениях
Регистрация: 16.10.2005
По умолчанию 24.11.2009, 13:57

Цитата:
Вот с вхождением чуть посложнее. Если тупо, то просто открываешь каждый файл и ищешь вхождение. Но это может быть избыточно. Можно, например, не искать в нетекстовых файлах, исключая их по расширению.
Cо вхождением значительно сложнее. Если это реальная задача, а не учебный пример, то просто необходимо учитывать возможность Unicode, иначе не найдутся файлы, например, Word.

А главное, при реализации "в лоб" будут очень большие тормоза..
Ответить с цитированием
  (#7 (permalink)) Старый
AfIS AfIS вне форума
Member
 
Сообщений: 384
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.02.2005
По умолчанию 25.11.2009, 04:32

Цитата:
Cо вхождением значительно сложнее. Если это реальная задача, а не учебный пример, то просто необходимо учитывать возможность Unicode, иначе не найдутся файлы, например, Word.

А главное, при реализации "в лоб" будут очень большие тормоза..
Ап чём и речь, ап чём и речь... :upset:

Opossum, так как с поиском по вхождению? Это для универа?
Ответить с цитированием
  (#8 (permalink)) Старый
AfIS AfIS вне форума
Member
 
Сообщений: 384
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.02.2005
По умолчанию 25.11.2009, 04:37

Небольшой такой косячок в посте, где поиск по дате... Забыл строку в TDateTime перевести. Надо так:

Код:
var
  StartDate, EndDate, FileDate: TDateTime;
...
  StartDate := StrToDateTime(Edit1.Text);
  EndDate := StrToDateTime(Edit2.Text);
  FileDate := FileDateToDateTime(SearchRec.Time);
  if (FileDate >= StartDate) and (FileDate <= EndDate) then
Ответить с цитированием
  (#9 (permalink)) Старый
Opossum Opossum вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 21.11.2009
По умолчанию 26.11.2009, 10:31

да,для универа :baby:
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Срочно нужна помощь! wavesearch Любые вопросы от новичков 7 22.03.2012 23:16
Срочно нужна помощь!!!( NeedFastHelp Lisp 0 08.12.2011 12:00
Срочно Нужна помощь!!! Yo_Oda Любые вопросы от новичков 35 31.07.2011 09:39
Срочно нужна помощь. weedzie Техническая поддержка 46 06.07.2011 20:43
срочно нужна помощь rogan Любые вопросы от новичков 43 26.06.2011 18:59
срочно нужна помощь ivo Память 5 08.03.2011 13:19
срочно нужна помощь logan Софт и программы 14 30.04.2010 21:42
Срочно нужна помощь!!! Phoenix163 Софт и программы 26 25.12.2009 13:26
Срочно Нужна Помощь! V-Diego Подбор комплектующих 1 11.09.2009 17:32



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов