如何使用"和"和"或"关键词在一起"如果"声明

时间:2017-06-13 07:48:18

标签: if-statement vbscript

我尝试在我的VB脚本中的单个If语句中使用AndOr关键字,我使用VLC Media Player使用命令行进行流式处理。 我尝试过这样:

If (CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (((CInt(TSSEPStr) - CInt(PTSSEPStr)) <= 5) Or ((CInt(TSSEPStr) - CInt(PTSSEPStr)) >= -5)) Then

我尝试将括号用于整个If语句,但它什么也没做。

If ((CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (((CInt(TSSEPStr) - CInt(PTSSEPStr)) <= 5) Or ((CInt(TSSEPStr) - CInt(PTSSEPStr)) >= -5))) Then

当我执行我的脚本时,只有以下两个条件似乎有效。

1.If ((CurrentEP >= 2) Then '<< FIRST CONDITION

2.If (CStr(TSNStr) = CStr(PTSNStr)) Then '<< SECOND CONDITION

第三个条件

(((CInt(TSSEPStr) - CInt(PTSSEPStr)) <= 5) Or ((CInt(TSSEPStr) - CInt(PTSSEPStr)) >= -5)))

始终评估为false,这应检查TSSEPStrPTSSEPStr的差异是否小于/等于5或大于/等于-5。

我想知道是否可以在一个语句中使用Or关键字,该语句也与VB Script中的多个其他And个关键字一起使用。

3 个答案:

答案 0 :(得分:2)

在@ GaryEvans的回答的帮助下,我发现这条线总是被评估为假,因为使用了太多的括号。

我做了一个小改动,以下一行按照我的预期运作:

If (CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (CInt(TSSEPStr) - CInt(PTSSEPStr) <= 5) And (CInt(TSSEPStr) - CInt(PTSSEPStr) >= -5) Then

使它更短更清晰:

If (CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (CInt(TSSEPStr - PTSSEPStr) <= 5) And (CInt(TSSEPStr - PTSSEPStr) >= -5) Then

答案 1 :(得分:1)

是的,有可能,魔鬼在细节,所有关于考虑所有可能的路径并密切关注决定评估顺序的包围(从你的代码看,你很清楚)。

最深的方括号评估首先进行,然后是下一级,直到达到顶部。例如(您可以在Excel中尝试此操作): -

5 / 4 * 3 / 2      = 1.875
5 / (4 * 3) / 2    = 0.208333333

评估结果为: -

1.25 * 3 / 2
3.75 / 2
1.875

5 / 12 / 2
0.416666667 / 2
0.208333333

还有一个算术order of precedence也可以在 想要阅读的地方发挥作用。

此外,(您可能也知道这一点) AND评估中的所有元素必须为True,结果为True OR评估中True的任何元素都会产生True

True AND True AND True = True

True AND True AND False = False

True OR True OR True = True

True OR True OR False = True

您还可以添加括号来调整订单评估: -

True ANDTrue AND True)= True

True ANDTrue OR False)= True

False ORFalse AND True)= False

对于你的问题,我认为你有大于和小于混合,也有轻微到很多包围,但它应该已经评估了。

1&gt; 2 = False

2&gt; 1 = True

2&gt; 2 = False

1&lt; 2 = True

2&lt; 1 = False

2&lt; 2 = False

让我们致电CInt(TSSEPStr) - CInt(PTSSEPStr) i: -

i = 0
(i >= 5) Or (i <= -5) = (False) Or (False) = False

0不大于或等于5,0不小于或等于-5

i = 10
(i >= 5) Or (i <= -5) = (True) Or (False) = True

10大于或等于5,10不小于或等于-5

这就是说它必须是 -5到5的范围。如果我们翻转大于/小于运算符,它说必须 范围为-5到5,我们还需要将Or更改为And

i = 0
(i <= 5) And (i >= -5) = (True) And (True) = True

0小于或等于5,0小于或等于-5

i = 10
(i <= 5) And (i >= -5) = (False) And (True) = False

10不小于或等于5,10大于或等于-5

If (CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (CInt(TSSEPStr) - CInt(PTSSEPStr) >= 5) And (CInt(TSSEPStr) - CInt(PTSSEPStr) <= -5) Then

希望这有帮助。

答案 2 :(得分:0)

由于优先级和评估顺序,有许多条件总是使评估变得棘手。您可能希望查看与vb-script相关的规则。解决方案通常是像您尝试过的括号,但我怀疑您需要在前两个条件中再添加一对,例如:

If (((CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr))) And (((CInt(TSSEPStr) - CInt(PTSSEPStr)) <= 5) Or ((CInt(TSSEPStr) - CInt(PTSSEPStr)) >= -5))) Then