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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2012, 18:14   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
Вопрос Отбор записей при поиске

Добрый вечер! Ищу файлы в папке так:
Код:
procedure TForm1.sSpeedButton2Click(Sender: TObject);
var
 SR: TSearchRec;
 path: string;
 Attr,i: Integer;
begin
 Form1.sListBox1.Clear;
 Form1.sStatusBar1.Panels[5].Text:='0';
 path:=Form1.drvcbb1.Drive + ':\' + '*.' + Form2.sEdit1.Text;
 Attr:=faAnyFile;
 FindFirst(path,Attr,SR);
 Application.ProcessMessages;
 if (SR.Name <> '') and (SR.Size = StrToInt(Form1.sEdit1.Text)) then
 begin
  Form1.sListBox1.Items.Add(SR.Name + '  (' + IntToStr(SR.Size) + ' КБ )');
  Form1.sStatusBar1.Panels[5].Text:=IntToStr(Form1.sListBox1.Items.Count);
  while FindNext(SR) = 0 do
    Form1.sListBox1.Items.Add(SR.Name + '  (' + IntToStr(SR.Size) + ' КБ )');
    Form1.sStatusBar1.Panels[5].Text:=IntToStr(Form1.sListBox1.Items.Count);
    Application.ProcessMessages;
 end;
  FindClose(SR);
end;
Как сделать, чтобы в Form1.sListBox1 добавлялись только те записи о файлах, размер которых указан в StrToInt(Form1.sEdit1.Text)? Заранее спасибо за помощь в доработке.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 02.04.2012, 18:35   #2
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

наверно лучше сделать два размера от и до а потом получаем размер файла и
Код:
if (SR.Size>=StrToInt(Form1.sEdit1.Text) and  (SR.Size=<StrToInt(Form1.sEdit2.Text) then
Кольша вне форума Ответить с цитированием
Старый 02.04.2012, 18:36   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

сравнивать поле SR.Size.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.04.2012, 18:37   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Что-то наподобие
Код:
procedure TForm1.sSpeedButton2Click(Sender: TObject);
var
 SR: TSearchRec;
 path: string;
 i: Integer;
begin
  Form1.sListBox1.Clear;
  Form1.sStatusBar1.Panels[5].Text:='0';
  path:=Form1.drvcbb1.Drive + ':\' + '*.' + Form2.sEdit1.Text;
  i:=FindFirst(path,faAnyFile,SR);
  while i=0 do begin
    if (SR.Name<>'.') and (SR.Name<>'..') and (SR.Size = StrToInt(Form1.sEdit1.Text)) then begin
      Form1.sListBox1.Items.Add(SR.Name + '  (' + IntToStr(SR.Size) + ' КБ )');
      Form1.sStatusBar1.Panels[5].Text:=IntToStr(Form1.sListBox1.Items.Count);
    end;
    i:=FindNext(SR);
    Application.ProcessMessages;
  end;
  FindClose(SR);
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.04.2012, 07:41   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Почему-то не срабатывает условие поиска когда я указываю явно размер файлов, которые мне нужно найти:
Код:
 Form1.sListBox1.Clear;
 Form1.sStatusBar1.Panels[5].Text:='0';
 path:=Form1.drvcbb1.Drive + ':\' + '*.' + Form2.sEdit1.Text;
 Attr:=faAnyFile;
 FindFirst(path,Attr,SR);
 Application.ProcessMessages;
 if (SR.Name <> '') and (SR.Size = StrToInt64(Form1.sEdit1.Text)) then
 begin
  Form1.sListBox1.Items.Add(SR.Name + '  (' + IntToStr(SR.Size) + ' КБ )');
  Form1.sStatusBar1.Panels[5].Text:=IntToStr(Form1.sListBox1.Items.Count);
  while FindNext(SR) = 0 do
    Form1.sListBox1.Items.Add(SR.Name + '  (' + IntToStr(SR.Size) + ' КБ )');
    Form1.sStatusBar1.Panels[5].Text:=IntToStr(Form1.sListBox1.Items.Count);
    Application.ProcessMessages;
 end;
  FindClose(SR);
Кто-нибудь знает почему ничего не находится? Я знаю, что файлы такого размера есть.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 03.04.2012, 07:50   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

SR.Size - размер в байтах. Что в sEdit1.Text? Попробуй по условию SR.Size>=
Что получишь посмотри
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.04.2012, 08:07   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Ну хорошо. Как тогда перевести число из sEdit1.Text в байты? Или из SR.Size в байты опять же? Чтобы сравнивать одинаковый тип данных.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 03.04.2012, 08:26   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

artemavd, в примере из #5 если первый найденный файл не удовлетворяет условию, то остальные и искаться не будут. Все таки гляньте на #4
и в path:=Form1.drvcbb1.Drive + ':\' + '*.' + Form2.sEdit1.Text Form2.sEdit1.Text - расширение?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.04.2012, 08:33   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Цитата:
и в path:=Form1.drvcbb1.Drive + ':\' + '*.' + Form2.sEdit1.Text Form2.sEdit1.Text - расширение?
Да, расширение без точки.
А чем принципиально код из поста №4 отличается от кода в посте №5? Можешь на словах пояснить.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 03.04.2012, 09:08   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

В #5 анализируются параметры первого выбранного файла и если они устраивают, то все остальные файлы считаются подходящими, иначе обработка прекращается. В #4 анализируются параметры каждого файла в отдельности
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вторичный отбор записей Cyworc БД в Delphi 2 05.03.2012 23:31
Отбор записей в форме с помощью переключателей Swatch Microsoft Office Access 1 18.12.2009 20:58
Отбор уникальных записей динамически Shift1834 Microsoft Office Excel 6 14.12.2009 00:04
Отбор записей с помощью раскрывающегося списка xeqipex Microsoft Office Access 1 25.06.2008 17:01
Отбор записей по введенным буквам irr33 Microsoft Office Access 4 17.06.2008 19:31