Как я могу создать оператор If с несколькими условиями (не: несколько вложенных операторов) в VBS?

В PHP, если я могу сравнить значение со списком других значений на лету:

$extension = "pdf";
if (!in_array($extension, array("docx", "xlsx", "txt")) {
  // do stuff to the pdf
}

Как я могу перенести это на VBS? Поскольку я не мог понять, как создать массив на лету, как в php, я попробовал оператор if с тремя условиями:

extension = objFso.GetExtensionName(objFile.Path)
If Not (extension = "docx") OR (extension = "xlsx") OR (extension = "txt") Then
  // do stuff to the pdf
End If

Но это не работает. Условия просто игнорируются. Два вопроса:

  1. Почему игнорируются условия?
  2. Как я могу вместо использования нескольких If условий или If операторов создать массив на лету для сравнения?

Любая помощь приветствуется.


person Pr0no    schedule 14.01.2014    source источник


Ответы (2)


Самый короткий способ, который я знаю, это (логический тип)

UBound(Filter(Array("docx", "xlsx", "txt"), "pdf")) > -1 возвращает False

и

UBound(Filter(Array("docx", "xlsx", "txt"), "txt")) > -1 возвращает True

как видите, Array("doc", "xlsx", "txt") создается на лету, и я заменил extension, который вы использовали в исходном вопросе, двумя разными строками ("pdf" и "txt")


Так, например

extension = objFso.GetExtensionName(objFile.Path)
' extension is pdf
' the below produces false which in your logic means YES it's none of them
If (UBound(Filter(Array("docx", "xlsx", "txt"), extension)) > -1) Then
  ' you assume it's pdf
  ' do stuff to the pdf
End If
person Community    schedule 14.01.2014

Как насчет select case:

extension = lcase(objFso.GetExtensionName(objFile.Path))

select case extension
   case "docx", "xlsx", "txt"
     ' is one of the above
     ' do something
   case "zzz"
     ' its a .zzz
   case else
     ' its something else
end select

В вашем текущем логическом контрасте

If Not True Or True ...

и

If Not (True Or True) ...
person Alex K.    schedule 14.01.2014
comment
+1 за фактическое объяснение, почему подход ОП не сработал. - person Ansgar Wiechers; 14.01.2014