2010-06-13 2 views
0

У меня есть следующий скрипт VB Как написать этот скрипт VB с синтаксисом case? Для того, чтобы выполнить профессиональное письмо, если тогда .... yaelесли тогда endif, другое умное решение вместо if then

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

Не могли бы вы найти путь к использование случай? – jmasterx

+2

Коммутатор/корпус предназначен для проверки переменной на несколько значений. Здесь вы проводите независимые тесты, поэтому здесь нет переключателей. – Eiko

ответ

0

Вы не можете использовать select/case для этого типа вещей, но есть другие способы уплотнения или упрощения кода.

Во-первых, обратить условие проверки:

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

Это позволяет избежать необходимости команды «ничего не делать» после того, как если/то.

Далее, вы можете обернуть вещи в функции и подпрограммы, чтобы уменьшить повторяющуюся часть кода:

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

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

Тогда ваша серия испытаний становится:

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

Хотя может потребоваться еще несколько строк кода, вы можете реализовать простой конечный автомат для этого. Затем вместо использования конструкции if/then вы использовали бы какой-то оператор switch с перечисленным набором состояний, в котором вы могли бы быть.

Эта информация FSMs http://en.wikipedia.org/wiki/Finite-state_machine и их легко реализовать с использованием перечислений и операторы переключения.

Я просто схватил это из Google, вот простой FSM реализации в 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

, пожалуйста, дайте мне соответствующие примеры THX – yael

+0

и если в VB есть команда, которая ничего не значит? только поставить здесь после синтаксиса? THX – yael

4

Есть альтернативы, такие как with пункта в VB (или VBS) или switch на других языках, однако те, которые используются для одного заданного условия/var, а затем их значение проверяется, но потому, что вам не нужно проверять одну вещь , например, несколько имен файлов C:\file1, C:\file2 и т. д., поэтому в этом случае они не применимы.

В качестве другой альтернативы, вы можете использовать цикл вместо потому что номер имя файла, кажется, быть последовательными в своем коде:

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 

Таким образом, в целом, выше код представляет собой сокращенный ваш код.

Смежные вопросы