Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Ответ
 
Опции темы
Старый 18.01.2020, 00: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, 08:56   #2
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,474
По умолчанию

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

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

Код:
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 в 10:22.
evg_m вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


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