2016-07-07 12 views
0

私のコードを見るために別の目をしたいと考えています。私は比較的大きなIf ... Else ...ステートメントを書いています。すべてが正しくコーディングされているようです。私は全体のスクリプトを踏んだが、1つのスポットは、私に与えることを続けている"Expected 'End If'"それは私がそれを必要としないように見えるとき。ElseステートメントでEnd Ifステートメントが見つからないというエラーが発生した場合

簡単に言えば、私は言いたいことがあります:もしかしたら、これらのことをしてください。そうでなければ、それらの事のうちの1つだけをしてください。

ここでは、コードのブロックです:

If(sLogFile <> "" AND nPing <> 1) Then 
    pingStatus = 1 

    If(findTag(sLogFile, daRunning) = 1) Then 
     daStatus = 1 
    Else If(findTag(sLogFile, daNotRunning) = 1) Then 
     daStatus = 2 
    Else 
     daStatus = 3 
    End If 

    If(daStatus = 1 AND findTag(sLogFile, daDataFlowing) = 1) Then 
     daFlowStatus = 1 
    Else If(daStatus = 1 AND findTag(sLogFile, daDataNotFlowing) = 1) Then 
     daFlowStatus = 2 
    Else If(daStatus = 1 AND findTag(sLogFile, daDataUnchecked) = 1) Then 
     daFlowStatus = 3 
    Else If(daStatus <> 1) Then 
     daFlowStatus = 4 
    End If 

    If(findTag(sLogFile, aeRunning) = 1) Then 
     aeStatus = 1 
    Else If(findTag(sLogFile, aeNotRunning) = 1) Then 
     aeStatus = 2 
    Else 
     aeStatus = 3 
    End If 

    If(findTag(sLogFile, aeDataUnchecked) = 1) Then 
     aeFlowStatus = 2 
    Else If(findTag(sLogFile, aeDataExecutionError) = 1) Then 
     aeFlowStatus = 3 
    Else If(findTag(sLogFile, aeDataConnectionError) = 1) Then 
     aeFlowStatus = 4 
    Else If(findTag(sLogFile, aeTimeStamp) = 1) Then 
     location = InStr(sLogFile, aeTimeStamp) 
     leftTrimmedString = LTrim(Mid(sLogFile, (location - 2))) 
     location = InstrRev(leftTrimmedString, ":") 
     dateString = Trim(Mid(leftTrimmedString, 1, (location + 5))) 
     timeDiff = DateDiff("h", dateString, Now) 
     If(timeDiff > 5) Then 
      aeFlowStatus = 5 
     Else 
      aeFlowStatus = 1 
     End If 
    End If 

Else If(nPing = 1) Then 
    pingStatus = 2 

    If(findTag(sLogFile, aeDataUnchecked) = 1) Then 
     aeFlowStatus = 2 
    Else If(findTag(sLogFile, aeDataExecutionError) = 1) Then 
     aeFlowStatus = 3 
    Else If(findTag(sLogFile, aeDataConnectionError) = 1) Then 
     aeFlowStatus = 4 
    Else If(findTag(sLogFile, aeTimeStamp) = 1) Then 
     location = InStr(sLogFile, aeTimeStamp) 
     leftTrimmedString = LTrim(Mid(sLogFile, (location - 2))) 
     location = InstrRev(leftTrimmedString, ":") 
     dateString = Trim(Mid(leftTrimmedString, 1, (location + 5))) 
     timeDiff = DateDiff("h", dateString, Now) 
     If(timeDiff > 5) Then 
      aeFlowStatus = 5 
     Else 
      aeFlowStatus = 1 
     End If 
    End If 
End If 

誤差を約2/3方法ダウン(Else If(nPing = 1) Then)のメインElse Ifで起こって保持します。私はその行にエラーが表示されます。

End IfをElse IFの上に置き、Else IfIfに変更してブロックを2つのブロックに分割しようとしました。それは私がそれをするときに機能しますが、私は本当に2つのif文を必要としません。

それで、私は混乱したか、通訳者に問題がありますか?

答えて

3

Visual Basicでは、 "else if"ステートメントはElseIfではなくElse Ifと書かれています。私はあなたの問題だと思う。

+1

「Else If」はVBScriptでは有効な構文ですが、対応する「End If」もElseブロック内に表示する必要があります。つまり、Elseブロックは別のIfブロックをカプセル化します。 – Nilpo

+0

@Nilpoはストレッチではないですか? 'Else'ブロックの中に入れ子にされた' If'について話しているのであれば、実際の 'If'ステートメントは同じ行で始めることはほとんどありません。マシューは、正しい構文が正しいかどうかは 'ElseIf'です。 – Lankymart

+0

@ Lankymartはい、それは私が言っていることです。ネストされたIfは同じ行で始まり、有効な構文です。 – Nilpo

2

ElseIfではなくElse Ifを使用する必要があるからです。違いを見ます?

大きな問題は、このような膨大な「スパゲッティコード」でエラーを見つけ出すことが常に難しいことです。コードを小さな再利用可能なメソッドに分割することを検討してください。そうすれば、どこに問題があるのか​​を簡単に把握できます。言い換えれば、ブロックされたすべてのブロックがすべて一緒に詰め込まれていることも痛いというわけではありません。

+0

ええ、それは読んでいるように書くのはひどいものでした。私は通常このようなコードを書いていません。申し訳ありませんが、あなたはそれを読む必要があります!しかし、助けてくれてありがとう。 – Alamb

関連する問題