If statement 如何使用;及;及;或;同一个关键字中的同一个关键字;如果;陈述
我试图在VB脚本中的单个If语句中使用If statement 如何使用;及;及;或;同一个关键字中的同一个关键字;如果;陈述,if-statement,vbscript,If Statement,Vbscript,我试图在VB脚本中的单个If语句中使用和和或关键字,我使用VLC Media Player使用命令行进行流式处理。 我试着这样做: If (CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (((CInt(TSSEPStr) - CInt(PTSSEPStr)) <= 5) Or ((CInt(TSSEPStr) - CInt(PTSSEPStr)) >= -5)) Then 当我执行脚本时,似乎只有以下两个条件有效
和
和或
关键字,我使用VLC Media Player使用命令行进行流式处理。
我试着这样做:
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
1.如果((CurrentEP>=2)那么“有许多条件,由于求值的优先级和顺序,总是会使求值变得棘手。您可能希望查看那些与vb脚本相关的规则。解决方案通常像您尝试的那样是圆括号,但我怀疑您需要在前两个条件周围再添加一对,如:
If (((CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr))) And (((CInt(TSSEPStr) - CInt(PTSSEPStr)) <= 5) Or ((CInt(TSSEPStr) - CInt(PTSSEPStr)) >= -5))) Then
如果((CurrentEP>=2)和(CStr(TSNStr)=CStr(PTSNStr)))和((CInt(TSSEPStr)-CInt(PTSSEPStr))=5)),则
是的,这是可能的,魔鬼在于细节,这是关于思考所有可能的路径,并密切注意决定求值顺序的括号(通过查看代码,您很清楚)
首先执行括号最深的评估,然后执行下一级评估,直到到达顶部。例如(您可以在Excel中尝试此操作):-
这些评价是:-
1.25 * 3 / 2
3.75 / 2
1.875
及
这里有一个算法也起作用,你可能想仔细阅读
另外,(您可能也知道这一点)和
求值中的所有元素都必须是True
,才能使结果是True
。在或求值中,任何为True
的元素都将导致为True
True
和
True
和
True
=True
真
和
真
和
假
=假
True
或
True
或
True
=True
True
或
真
或
假
=真
然后还可以添加括号以调整顺序计算:-
True
和
(True
和
True
)=True
True
和
(True
或
False
)=True
假
或
(假
和
真
)=假
关于你的问题,我认为你把你的大于和小于混淆在一起了,也有一些小到多的括号,但它仍然应该被评估
1>2=False
2>1=True
2>2=False
1<2=True
2<1=False
2<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
i = 10
(i <= 5) And (i >= -5) = (False) And (True) = False
If (CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (CInt(TSSEPStr) - CInt(PTSSEPStr) >= 5) And (CInt(TSSEPStr) - CInt(PTSSEPStr) <= -5) Then
i=10
(i=-5)=(假)和(真)=假
10不小于或等于5,10大于或等于-5
i = 10
(i >= 5) Or (i <= -5) = (True) Or (False) = True
i = 10
(i <= 5) And (i >= -5) = (False) And (True) = False
If (CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (CInt(TSSEPStr) - CInt(PTSSEPStr) >= 5) And (CInt(TSSEPStr) - CInt(PTSSEPStr) <= -5) Then
如果(CurrentEP>=2)和(CStr(TSNStr)=CStr(PTSNStr))和(CInt(TSSEPStr)-CInt(PTSSEPStr)>=5)和(CInt(TSSEPStr)-CInt(PTSSEPStr)在@GaryEvans的答案的帮助下,我发现由于使用了太多的括号,这一行的计算结果总是为false
我只是做了一个小小的改变,下面这句话果然如我所料:
If (CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (CInt(TSSEPStr) - CInt(PTSSEPStr) <= 5) And (CInt(TSSEPStr) - CInt(PTSSEPStr) >= -5) Then
如果(CurrentEP>=2)和(CStr(TSNStr)=CStr(PTSNStr))和(CInt(TSSEPStr)-CInt(PTSSEPStr)=-5),则
使它更简短、更清晰:
If (CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (CInt(TSSEPStr - PTSSEPStr) <= 5) And (CInt(TSSEPStr - PTSSEPStr) >= -5) Then
如果(CurrentEP>=2)和(CStr(TSNStr)=CStr(PTSNStr))和(CInt(TSSEPStr-PTSSEPStr)=-5),则
对于变量中的有效值,我看不出你的第三个条件是什么,但总是真的。这对我帮助很大,谢谢:-)
If (CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (CInt(TSSEPStr - PTSSEPStr) <= 5) And (CInt(TSSEPStr - PTSSEPStr) >= -5) Then