开发者

if then endif , other smart solution in place of if then

I have the following VB script How to write this VB script with case syntax? In order to perform professi开发者_JAVA百科onal writing in place if then…. yael

Set fso = CreateObject("Scripting.FileSystemObject") 

If (fso.FileExists("C:\file1 ")) Then 
    Verification=ok
Else 
  WScript.Echo("file1") 
  Wscript.Quit(100)
End If 

If (fso.FileExists("C:\file2 ")) Then 
  Verification=ok
Else 
  WScript.Echo("file2") 
  Wscript.Quit(100)
End If 


If (fso.FileExists("C:\file3 ")) Then 
    Verification=ok
Else 
  WScript.Echo("file3") 
  Wscript.Quit(100)
End If

. . . .


There are alternatives such as with clause in VB (or vbs) or switch in other languages, however those are used for a single given condition/var and then their value is checked but because you don't have to check for a single thing eg multiple file names C:\file1, C:\file2, etc, so it is not applicable to use them in this case.

As an another alternative, you can use a loop instead because file name number seems to be consistent in your code:

For i 1 To 3
  If (fso.FileExists("C:\file" & i)) Then
      Verification = ok
  Else
    WScript.Echo("file" & i)
    Wscript.Quit(100)
  End If
Next

So in all, the above code is shorthand of your code.


You can't use select/case for this type of thing, but there are other ways to condense or simplify the code.

First, reverse the test condition:

If Not (fso.FileExists("C:\file1 ")) Then 
  WScript.Echo("file1") 
  Wscript.Quit(100)
End If 

This avoids needing a "do nothing" command after if/then.

Next, you can wrap things up in functions and subroutines to reduce the repetitive bulk of the code:

function TestFile(sFileName)
  TestFile = fso.FileExists(sFileName)
end function

sub ErrorExit(sMessage, nCode)
  WScript.Echo sMessage
  WScript.Quit nCode
end sub

Then your series of tests becomes:

if not TestFile("c:\file1") then
  ErrorExit "file1 not found", 100

elseif not TestFile("c:\file2") then
  ErrorExit "file2 not found", 100

elseif not TestFile("c:\file3") then
  ErrorExit "file3 not found", 100
end if


Though it may take you a quite a few more lines of code, you could implement a simple finite state machine to do this. Then instead of using an if/then construct you would be using some sort of switch statement with an enumerated set of "states" that you could possibly be in.

This details FSMs http://en.wikipedia.org/wiki/Finite-state_machine and they're easy to implement using enumerations and switch statements.

I just grabbed this of Google, here is a simple FSM implementation in C:

#include <stdio.h>

main()
{
    int c;

    START: 
        switch(c = getchar()){
            case 'f' : goto F;
            case 'b' : goto B;
            case EOF : goto FAIL;
            default: goto START; }

    F:
        switch(c = getchar()){
            case 'o' : goto FO;
            case EOF : goto FAIL;
            default  : goto START;}

    FO:
        switch(c = getchar()){
            case 'o' : goto SUCCESS;
            case EOF : goto FAIL;
            default  : goto START;}

    B:
        switch(c = getchar()){
            case 'a' : goto BA;
            case EOF : goto FAIL;
            default  : goto START;}

    BA:
        switch(c = getchar()){
            case 'r' : goto SUCCESS;
            case EOF : goto FAIL;
            default  : goto START;}

    FAIL: 
        printf("Does not match.\n");
        return;
    SUCCESS:
        printf("Matches.\n");
        return;
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜