| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Оператор If не справляется с условиями внутри него

Оператор If не справляется с условиями внутри него

Ответ
Поиск в этой теме
Непрочитано 26.01.2012, 02:09 #1
Оператор If не справляется с условиями внутри него
AntSam
 
Регистрация: 14.04.2010
Сообщений: 37

Есть оператор If Then Else (Block)
Есть переменные в которых прописываются разные текстовые строки
например
Код:
[Выделить все]
A="ВА-101/1/16" 
B="Да" 
C="УЗО/2/16/30" 
D="ЩС1" 
E="ЩС1-1"
Все эти переменные меняются
Получилось условие

Код:
[Выделить все]
If A="ВА-101/1/16" And B="Нет" Then 
RESULT=A 
ElseIf A="ВА-101/1/16" And B="Да" Then 
RESULT=A+C 
ElseIf A="ВА-101/1/20" And B="Нет" Then 
RESULT=A 
ElseIf A="ВА-101/1/20" And B="Да" Then 
RESULT=A+C 
.... 
Else 
RESULT="" 
End If
Хотелось добавить туда еще два условия, а именно:
Если два первых условия в переменных верны A и B то тогда проверять чтобы не было совпадения по двум другим D и E. Уточню если есть автомат ВА-101/1/20 и УЗО/2/16/30 в щите ЩС1 в группе ЩС1-1, то если следующий автомат тоже находится в той же группе и в том же щите тогда его не учитывать и переходить в к следующему. Ваши предложения

Последний раз редактировалось Кулик Алексей aka kpblc, 26.01.2012 в 02:14.
Просмотров: 3268
 
Непрочитано 26.01.2012, 02:18
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844


If .. Then .. Else может содержать не более 9 уровней. Это достаточно известное ограничение.
Используй Select Case:
Код:
[Выделить все]
Public Function test()
Dim a As String, b As String, c As String, d As String, e As String
Dim res As String
a = "ВА-101/1/16": b = "Да": c = "УЗО/2/16/30"
d = "ЩС1": e = "ЩС1-1"
  Select Case True
    Case (a = "ВА-101/1/16" Or a = "ВА-101/1/20") And b = "Нет"
      res = a
    Case (a = "ВА-101/1/16" Or a = "ВА-101/1/20") And b = "Да"
      res = a + c
    Case Else
      res = ""
  End Select
  test = res
End Function
Хотя я всерьез бы задумался о применении массивов и коллекций, если это возможно.
---
Добавлено: второй вариант кода:
Код:
[Выделить все]
Public Function test()
Dim a As String, b As String, c As String, d As String, e As String
Dim res As String
a = "ВА-101/1/16": b = "Да": c = "УЗО/2/16/30"
d = "ЩС1": e = "ЩС1-1"
  If a = "ВА-101/1/16" Or a = "ВА-101/1/20" Then
    If b = "Нет" Then res = a Else res = a + c
  End If
  test = res
End Function
Какой из них будет более выгодным - не знаю.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.01.2012, 03:11
#3
AntSam


 
Регистрация: 14.04.2010
Сообщений: 37


А этот код заработает в VBscript Autocad MEP 2010?

Последний раз редактировалось AntSam, 26.01.2012 в 04:41.
AntSam вне форума  
 
Непрочитано 26.01.2012, 23:11
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844


С соответствующими переделками - должен. У меня аналог (то бишь Select Case True) вполне спокойно срабатывал в AutoCAD Architecture.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Оператор If не справляется с условиями внутри него

Размещение рекламы