2010-06-13 2 views
0

J'ai le script VB suivant Comment écrire ce script VB avec la syntaxe de cas? Afin d'effectuer l'écriture professionnelle en place si alors .... yaelsi alors endif, autre solution intelligente à la place de si alors

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 

. . . .

+0

Pouvez-vous trouver un moyen de cas d'utilisation? – jmasterx

+2

Le commutateur/boîtier sert à tester une variable par rapport à plusieurs valeurs. Vous faites des tests différents indépendants ici - donc pas de commutateur/cas ici. – Eiko

Répondre

0

Vous ne pouvez pas utiliser select/case pour ce type de chose, mais il existe d'autres façons de condenser ou de simplifier le code.

Tout d'abord, inverser la condition de test:

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

On évite ainsi avoir besoin d'une commande "ne rien faire" après if/then.

Ensuite, vous pouvez envelopper les choses dans les fonctions et sous-routines de réduire l'encombrement répétitif du code:

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

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

Ensuite, votre série de tests devient:

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 
0

Bien que cela vous prenne un peu plus de lignes de code, vous pouvez implémenter une machine à états finis simple pour cela. Au lieu d'utiliser une construction if/then, vous utiliseriez une sorte d'instruction switch avec un ensemble énuméré d'états dans lesquels vous pourriez éventuellement être.

Ceci détaille les FSMs http://en.wikipedia.org/wiki/Finite-state_machine et ils sont faciles à implémenter en utilisant des énumérations. et basculer les déclarations.

Je viens saisirent ce de Google, voici une implémentation simple EFM dans 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

s'il vous plaît donnez-moi des exemples pertinents THX – yael

+0

et s'il y a une commande dans VB qui ne rien faire? seulement mettre ici après la syntaxe? THX – yael

4

Il existe des alternatives telles que with clause VB (ou VBS) ou switch dans d'autres langues, mais ceux-ci sont utilisés pour une condition donnée/var et ensuite leur valeur est vérifiée mais parce que vous n'avez pas besoin de vérifier une seule chose chose par exemple plusieurs noms de fichiers C:\file1, C:\file2, etc, donc il n'est pas applicable de les utiliser dans ce cas.

En tant une autre alternative, vous pouvez utiliser une boucle à la place, car le nombre de nom de fichier semble être cohérent dans votre 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 

Ainsi, dans l'ensemble, le code ci-dessus est un raccourci de votre code.