если тогда endif, другое умное решение вместо если тогда - PullRequest
0 голосов
/ 13 июня 2010

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

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

.,,.

Ответы [ 3 ]

4 голосов
/ 13 июня 2010

Существуют альтернативы, такие как 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

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

0 голосов
/ 14 июня 2010

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

Сначала отмените условие теста:

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

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

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

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 голосов
/ 13 июня 2010

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

Я только что взял это из 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...