Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/10: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Ralik
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 327
1

Вопрос по логической переменной

26.04.2012, 10:54. Просмотров 1799. Ответов 19

Понимаю, что просто, но не выходит... Требуется создать логическую переменную (булевую), со значением true.
Delphi
1
var check_zn : boolean = true;

А в коде как-то не могу сообразить как, надо прописать условие
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
begin
if FileExists('C:\123') <> true then
      check_zn := false
      else
if FileExists('D:\123') <> true then
      check_zn := false
 if (check_zn) then
 begin
 ShowMessage('Файл отсутствует');
 check_zn.free;
  Application.Terminate;
            end;
        end
 
      else
    ShowMessage('Файл присутствует);
    check_zn.free;
  Application.Terminate;
      end;
      end;
Что в моем коде не верно?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2012, 10:54
Ответы с готовыми решениями:

Описание логической функции earlier(t1,t2)
Добрый день! Помогите, пожалуйста, исправить ошибку, связанную с...

Как лучше сделать повторение логической подпрограммы?
Здраствуйте, я в этом деле новичёк создал вроде неплохого бота для браузерной...

По заданным логическим выражениям построить цифровую модель логической схемы
По заданным логическим выражениям построить цифровую модель логической схемы ...

Передача значения переменной одной формы в описание переменной другой
Всем привет. Не могу найти решение проблемы. На первой форме имеется глобальная...

Как обратиться к переменной, если после функции тебе дали строку, с именем переменной
Допустим есть Function Generation():String; там генерируется строка, с именем...

19
Nutserus
210 / 169 / 24
Регистрация: 24.04.2012
Сообщений: 608
26.04.2012, 11:07 2
Хрень какая-то, а не код. Тут ошибок больше чем правильных строчек.

1) if FileExists('C:\123') зачем 2 раза?
2) check_zn.free; так делать нельзя и не за чем, кто вас надоумил?
3) ShowMessage('Файл присутствует); нет апострофа завершающего строку.
0
Mawrat
12833 / 5741 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
26.04.2012, 11:08 3
Delphi
1
2
3
4
  check_zn := FileExists('C:\123') or FileExists('D:\123');
...
  if check_zn then
...
0
Ralik
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 327
26.04.2012, 11:52  [ТС] 4
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var
  che : boolean;
begin
che := FileExists('C:\123') or FileExists('D:\123');
if che then
 begin
 ShowMessage('Истина');
 Application.Terminate;
 end
 else
 begin
     ShowMessage('Ложь');
     Application.Terminate;
     end
 end;
 
end.
Все время выдает ложь
0
Mawrat
12833 / 5741 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
26.04.2012, 11:55 5
Ralik, есть подозрение что C:\123 и D:\123 - это не файлы, а папки. Если это папки, то писать надо так:
Delphi
1
che := DirectoryExists('C:\123') or DirectoryExists('D:\123');
1
Ralik
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 327
26.04.2012, 12:13  [ТС] 6
Цитата Сообщение от Mawrat Посмотреть сообщение
Ralik, есть подозрение что C:\123 и D:\123 - это не файлы, а папки. Если это папки, то писать надо так:
Delphi
1
che := DirectoryExists('C:\123') or DirectoryExists('D:\123');
А Вы совершенно правы оказались, вот это я олень.
Ну да ладно, с кем не бывает, спасибо Вам!

Добавлено через 7 минут
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.FormCreate(Sender: TObject);
begin
if DirectoryExists('D:\1-23')= true  or DirectoryExists('D:\123')= true then
begin
 ShowMessage('Истина');
 Application.Terminate;
end
else
 ShowMessage('Ложь');
 Application.Terminate;
Почему вот этот код выдает все время одно условие?
Выходит, что не работает
Delphi
1
if DirectoryExists('D:\1-23')= true  or DirectoryExists('D:\123')= true then
0
Mawrat
12833 / 5741 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
26.04.2012, 12:17 7
Приоритет операции OR выше, чем приоритет операции "=", поэтому значение выражения вычисляется, на самом деле, не в том порядке, как задумывалось.
В этом выражении надо проставить скобки:
Delphi
1
if (DirectoryExists('D:\1-23')= true)  or (DirectoryExists('D:\123')= true) then
И сравнение с True здесь лишнее.
0
Ralik
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 327
26.04.2012, 15:01  [ТС] 8
А как в
Delphi
1
if DirectoryExists('D:\1-23')
заместо 123 вписать переменную?
То есть
Delphi
1
if DirectoryExists('D:\(myperemen)')
Добавлено через 1 час 39 минут
Почему при выполнении
Delphi
1
if (DirectoryExists('D:\123')= true)  or (DirectoryExists('D:\123')= true) then
Windows ругается сообщением "В устройстве нет диска" Вставьте диск в устройство \Device\Harddisk2\DR2
Хотя флешка есть и в компьютере открывается.

Добавлено через 11 минут
При этом D:\ - это флешка. А если без неё, то все проходит нормально.

Добавлено через 26 минут
Подскажите, как правильно надо обращаться к съёмным носителям?
Просто D:\123 - это не правильно, т.к. приводит к ошибке и сообщению, которое написал выше.???

Добавлено через 8 минут
Я, кажись понял.
Вот здесь все в порядке
Delphi
1
if (DirectoryExists('D:\1-23')= true)  or (DirectoryExists('D:\123')= true) then
Просто когда флешку вставляешь, WIndows 7 создает пустой съемный носитель, который невозможен к открытию. А код работает, просто с этим пустым диском, который невозможно открыть, выходит, что описаная выше процедура не катит.

Добавлено через 2 минуты
Очень прошу помочь с решением.
Суть вопроса в том, что моя программа должна выполнять условие:
Если папка 123 присутствует на любом из доступных дисков, тогда выполнить алгоритм 1, иначе алгоритм 2.
0
Mawrat
12833 / 5741 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
26.04.2012, 15:54 9
Цитата Сообщение от Ralik Посмотреть сообщение
Очень прошу помочь с решением.
Суть вопроса в том, что моя программа должна выполнять условие:
Если папка 123 присутствует на любом из доступных дисков, тогда выполнить алгоритм 1, иначе алгоритм 2.
Эту задачу можно решить так. С помощью функции GetLogicalDrives() получить буквы всех логических томов (дисков), которые зарегистрированы в системе. Затем, проверить наличие заданной папки на всех имеющихся томах.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
type
  TArrChar = array of Char;
 
//Функция возвращает динамический символьный массив, содержащий буквы
//логических томов (дисков), зарегистрированных в системе.
function GetArrDrv : TArrChar;
var
  D : set of Byte;
  DD : Cardinal;
  i, j : Byte;
begin
  D := [];
  DD := GetLogicalDrives();
  CopyMemory(@D, @DD, SizeOf(DD));
  SetLength(Result, 26);
  j := 0; //Количество значимых элементов в массиве.
  for i := 0 to High(Result) do begin
    if not (i in D) then Continue;
    Result[j] := Chr(65 + i);
    Inc(j);
  end;
  if j < Length(Result) then SetLength(Result, j);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
const
  AppPath = ':\123\';
var
  ArrDrv : TArrChar;
  i : Integer;
  F : Boolean;
begin
  //Получаем буквы всех дисков (логических томов), установленных в системе.
  ArrDrv := GetArrDrv();
 
  //Проверяем, есть ли заданная папка хотябы на одном из томов.
  F := False;
  for i := 0 to High(ArrDrv) do begin
    if not DirectoryExists(ArrDrv[i] + AppPath) then Continue;
    F := True;
    Break;
  end;
 
  //Ответ.
  if F then
    ShowMessage('Заданная папка найдена на одном из томов.')
  else
    ShowMessage('Ни на одном из томов заданная папка не найдена.');
end;
1
Ralik
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 327
26.04.2012, 16:15  [ТС] 10
Mawrat, ну простите за тупость.
Все сделал как в Вашем коде , при компиляции ругается
Delphi
1
 TArrChar = array of Char;
Пишит: Expected ':' but '=' found
Пробовал и так
Delphi
1
TArrChar := array of Char;
ТОгда пишит Expected an identifier but '=' found.
Пробовал и так
Delphi
1
TArrChar : array of Char;
ТОгда пишит Expected an identifier but Array found.
Спасите!
0
Mawrat
12833 / 5741 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
26.04.2012, 16:26 11
Цитата Сообщение от Ralik Посмотреть сообщение
Все сделал как в Вашем коде , при компиляции ругается
При программировании разное случается. Ошибки не должны расстраивать. Ведь, как известно: ошибок нет у того, кто ничего не делает.
---
Прикрепляю проект.
1
Вложения
Тип файла: rar GetLogicalDrives.rar (168.3 Кб, 9 просмотров)
Ralik
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 327
26.04.2012, 16:48  [ТС] 12
Спасибо! Но в результате все равно ошибку кидает. В устройстве нет диска. Вставьте в устройство \Device\Harddisk2\DR2
А вот если, например, файл будет на диске, младшем по букве, чем этот самый злополучный пустой диск, тогда все в норме, все ищет и ошибок не кидает
0
Mawrat
12833 / 5741 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
26.04.2012, 16:53 13
Ralik, я проверил этот код перед публикацией. Я создавал папку 123 на разных дисках - программа всегда её находила... Если я папку не создавал, то соответственно, папка, тогда, не находилась.
1
Ralik
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 327
26.04.2012, 16:55  [ТС] 14
Значит, когда возникает ошибка обращения к диску, в коде его нужно указать, что следует игнорировать для поиска на нем. Но как это сделать, сейчас задача непосильная. Поможете?

Добавлено через 45 секунд
Цитата Сообщение от Mawrat Посмотреть сообщение
Ralik, я проверил этот код перед публикацией. Я создавал папку 123 на разных дисках - программа всегда её находила... Если я папку не создавал, то соответственно, папка, тогда, не находилась.
Да это я загоняюсь, сообщения не внимательно читаю Я уже исправил пост.
0
Mawrat
12833 / 5741 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
26.04.2012, 16:56 15
Может быть какая-то проблема с подключением диска? Я сейчас ещё проверил на флешке - создал на ней папку 123, запустил прогу - папка нашлась. И у меня ошибки не возникают.
---
Ralik, а какой текст в сообщении об ошибке?
А - какое сообщение выше в постах уже указано...
Вот тут в чём причина не понятно пока... Harddisk2 - это съёмный диск? Или это флешка, как раз?
1
Ralik
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 327
26.04.2012, 17:00  [ТС] 16
Ошибки вот какие:
А программа работает нормально и без ошибок до тех пор, пока не вставить флешку (пробовал разных фирм и размеров)
Как только вставляем флешку, отображается виртуальное устройство, типа диск, доступа к которому нет и быть не может, а прога к нему щимится и выдает Еррор.
Пока не проверял на других системах, я работаю в Windows 7 x64
0
Миниатюры
Вопрос по логической переменной   Вопрос по логической переменной  
Mawrat
12833 / 5741 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
26.04.2012, 17:07 17
Да, здесь пока неясно в чём причина... Возможно есть какая-то проблема с подключением флешки. Можно попытаться спросить в разделе железа: Жесткие диски, CD, DVD, BD, Flash. - Возможно там что-то полезное подскажут.
1
Ralik
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 327
26.04.2012, 17:14  [ТС] 18
Цитата Сообщение от Mawrat Посмотреть сообщение
Да, здесь пока неясно в чём причина...
А как-нибудь возможно это сообщение перехватить и нажать программно кнопку продолжить?
Я понимаю, что вряд ли,т.к. думаю, что это сообщение выдает винда и выполнение приложения на момент появления сообщения приостанавливается. Но все же решусь спросить, мало ли.
Проблема меня стопорит, так как программа которую я пишу отключает клавиатуру и мышь, если отсутствует директория с секретным именем на флешке или диске.
То есть ошибка выдается, а нажать продолжить не вариант, потому, что приложение заблокировало клавиатуру и мышь.
Еще думаю, что эту проблему можно решить, просто программу по другому написать.
То есть необходимо обратиться ко всем буквам диска с вопросом "какого ты размера?" и там, где размер не 0 включать в основной поиск.
Ппц какой-то. Что скажете?
0
Mawrat
12833 / 5741 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
26.04.2012, 17:26 19
Перехватить исключение можно. Оно возникает, видимо, при вызове функции DirectoryExists(). Можно попробовать сделать так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
procedure TForm1.Button1Click(Sender: TObject);
const
  AppPath = ':\123\';
var
  ArrDrv : TArrChar;
  i : Integer;
  F : Boolean;
begin
  //Получаем буквы всех дисков (логических томов), установленных в системе.
  ArrDrv := GetArrDrv();
 
  //Проверяем, есть ли заданная папка хотябы на одном из томов.
  F := False;
  //Проверяем, есть ли заданная папка хотябы на одном из томов.
  F := False;
  for i := 0 to High(ArrDrv) do begin
    try
      if not DirectoryExists(ArrDrv[i] + AppPath) then Continue;
    except
      Continue;
    end;
    F := True;
    Break;
  end;
 
  //Ответ.
  if F then
    ShowMessage('Заданная папка найдена на одном из томов.')
  else
    ShowMessage('Ни на одном из томов заданная папка не найдена.');
end;
1
Ralik
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 327
26.04.2012, 21:56  [ТС] 20
И все-таки я его победил.
Решение нашел такое:
Переименовал "Злополучный диск" средствами Управление в другую букву логического диска
и по условию
Delphi
1
2
che := DirectoryExists('D:\'+(Regpas)) or DirectoryExists('E:\'+(Regpas)) or DirectoryExists('F:\'+(Regpas)) or DirectoryExists('G:\'+(Regpas)) or DirectoryExists('H:\'+(Regpas)) or DirectoryExists('I:\'+(Regpas)) or DirectoryExists('J:\'+(Regpas)) or DirectoryExists('K:\'+(Regpas)) or DirectoryExists('L:\'+(Regpas)) or DirectoryExists('M:\'+(Regpas)) or DirectoryExists('N:\'+(Regpas)) or DirectoryExists('O:\'+(Regpas)) or DirectoryExists('P:\'+(Regpas)) or DirectoryExists('Q:\'+(Regpas)) or DirectoryExists('R:\'+(Regpas)) or DirectoryExists('S:\'+(Regpas)) or DirectoryExists('T:\'+(Regpas)) or DirectoryExists('U:\'+(Regpas)) or DirectoryExists('V:\'+(Regpas)) or DirectoryExists('W:\'+(Regpas)) or DirectoryExists('X:\'+(Regpas)) or DirectoryExists('Z:\'+(Regpas));
if che then
Стало все работать как и требовалось.
1
26.04.2012, 21:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2012, 21:56

Программа с логической переменной
Логической переменной Pole присвоить значение true, если поля (Hor1, Ver1) и...

Значение, логической переменной, по умолчанию
Скажите, какое будет значение логической переменной по умолчанию? Заранее...

Определить значение логической переменной X
Нужно определить значение логической переменной X, при котором две логические...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru