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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2020, 23:58   #1
Silver_Surfer
 
Регистрация: 19.12.2013
Сообщений: 6
По умолчанию Фото формата png, больше заданного размера и при этом название фото не соответствует названию папки (если включить чекбокс). должно вывести 2(3) ошибки, а выводит только одну

Доброго времени суток! Уже долгое время ломаю голову, но никак не могу добиться корректного вывода информации. На примере расскажу: имеется фото формата png, больше заданного размера и при этом название фото не соответствует названию папки (если включить чекбокс). По логике должно вывести 2(3) ошибки, а выводит только одну. Как добиться корректного вывода информации? То есть чтобы я нажал кнопку, а мне сразу вывело 2 ошибки, включил чекбокс - соответственно 3.

Код:
procedure TForm1.ScanDir(StartDir: string; Mask: string; List: TStrings);
...
      begin
        if ((SearchRec.Size / 1024 / 1024) < maxS) and ((SearchRec.Size / 1024 / 1024) > minS) then
         if ExtractFileExt(StartDir + SearchRec.Name) = ext then
          begin
            if chk1.Checked then
            begin
              dirname := ExtractFileDir(StartDir + SearchRec.Name);
              Delete(dirname, 1, LastDelimiter('\', dirname));
              if dirname = Copy(SearchRec.Name,1,Pos('_',SearchRec.Name)-1) then
                List.Add(StartDir + SearchRec.Name)
              else
                List.Add('S' + StartDir + SearchRec.Name)
            end
            else
              List.Add(StartDir + SearchRec.Name)
          end
          else
            List.Add('S' + StartDir + SearchRec.Name)
        else
          List.Add('S' + StartDir + SearchRec.Name);
      end;
...
Код в Button1:
Код:
list := TStringList.Create;
  ScanDir(dir, '', list);
  for i := 0 to list.Count - 1 do
  begin
    try
      str := list.Strings[i];
      if (Copy(str, 1, 1) = 'S') then
      begin
        delete(str, 1, 1);
        lst1.Items.Add(str);
      end
    except
      lst1.Items.Add('Не получилось обработать: ' + str);
    end;
Silver_Surfer вне форума Ответить с цитированием
Старый 22.01.2020, 07:56   #2
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,840
По умолчанию

так, простая задача. ещё раз и по порядку, не смешивая всё в кучу.
---------------
1. убери всё лишнее из кода, пусть выводит чисто список всех файлов в папке.
2. как только добился работы пункта 1, то теперь приступай к написанию условий.
Код:
 (твой_чекбокс.Checked = True)then
  begin
   ...
 end;
а вот внутри этого условия в списке выискивай те имена, которые не соответствуют. и как ты ищешь: по названию или по размеру файла???? и тут же внутри этого условия сделай вывод на экран второго списка - списка этих неправильных имён.
3. если работает пункт 1 и пункт 2, то теперь ты в цикле сделай так, чтоб из первого списка убрались имена, которые есть во 2-м списке.
------------------
меня всегда бесили эти ELSE в условиях. старался обходиться без них.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.

Последний раз редактировалось NetSpace; 22.01.2020 в 07:59.
NetSpace вне форума Ответить с цитированием
Старый 22.01.2020, 09:10   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,532
По умолчанию

Код:
if ((SearchRec.Size / 1024 / 1024) < maxS) and ((SearchRec.Size / 1024 / 1024) > minS) then //если minS <=??? <=maxS (т.е. размеры корректны ) то 
//...проверяем дальше
         if ExtractFileExt(StartDir + SearchRec.Name) = ext then
          begin
        ...
??? // а если некорректны? НЕ проверяем???
Цитата:
по логике должно вывести 2(3) ошибки, а выводит только одну.
если хотим получить все ошибки, то каждая проверка д.б. независима
Код:
if размеры then OK else error_size ;
if ... then OK else error_... ;
if ...
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 22.01.2020 в 09:22.
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Если фото маленькое то лупа увеличивает, но если фото большое тогда уменьшает lybov12 JavaScript, Ajax 0 21.06.2019 11:48
С++ Ввести предложение.Вывести на экран только цифры. Если условие не выполняется, то вывести сообщение об этом toptopik Помощь студентам 1 14.03.2019 19:45
массивы. Определить номера строк, содержащих только отрицательные элементы, если их нет- вывести об этом сообщение (Delphi) неля199 Помощь студентам 8 18.04.2014 21:54
Изменение размера фото niniz7 Софт 4 17.02.2014 16:53
Хранение большого размера фото Droid БД в Delphi 0 07.05.2010 01:57