1 (изменено: inock, 2013-03-22 10:29:17)

Тема: VBS: If Else OR Case select

Господа, что-то никак не соображу. Вот эту конструкцию можно сделать через оператор Case select? Если да, то как? И есть ли смысл в такой переделке?

If InStr(strTarif,"Брянск - Корпоративный мобайл 07 поминутно (гор/фед) (КОРП) (SS)") <> 0 THEN
   id = "4"
ELSEIF InStr(strTarif,"Брянск - Телематика с 1 сек (фед) (КОРП) (SS)") <> 0 THEN
   id = "5"
ELSEIF InStr(strTarif,"Брянск - Корпоративный мобайл 07 с 61 сек (гор/фед) (КОРП) (SS)") <> 0 THEN
   id = "6"
ELSEIF InStr(strTarif,"Брянск - Телематика (КОРП) (SS)") <> 0 THEN
   id = "7"
ELSEIF InStr(strTarif,"Брянск - МТС Коннект-4 (ПРП) (SCP)") <> 0 THEN
   id = "8"
ELSEIF InStr(strTarif,"Брянск - Бизнес Эксперт (КОРП) (SS)") <> 0 THEN
   id = "9"
ELSEIF InStr(strTarif,"Брянск - КОМАНДА07 с 61 сек (гор/фед) (КОРП) (SS)") <> 0 THEN
   id = "10"
ELSEIF InStr(strTarif,"Брянск - Бизнес Коннект (КОРП) (SS)") <> 0 THEN
   id = "11"
ELSEIF InStr(strTarif,"Брянск - Эксклюзив (гор/фед) (КК) (SS)") <> 0 THEN
   id = "12"
ELSEIF InStr(strTarif,"Брянск - Телематика - 2012 (КОРП) (SS)") <> 0 THEN
   id = "13"
End If

2

Re: VBS: If Else OR Case select

А в чём причина использования InStr ? strTarif содержит варианты этих подстрок c дополнительным текстом ? Что то типа "AAAAA Брянск - Корпоративный мобайл 07 поминутно (гор/фед) (КОРП) (SS) BBBB" ?

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

3

Re: VBS: If Else OR Case select

Xameleon пишет:

strTarif содержит варианты этих подстрок c дополнительным текстом?

Да

4

Re: VBS: If Else OR Case select

Как вариант, наверное так можно. По моему скромному мнению Case особо ситуацию не изменит.


Dim strTarif, id, key
Dim dict: Set dict = CreateObject("Scripting.Dictionary")
strTarif = "Брянск - Бизнес Коннект (КОРП) (SS)"
dict("Брянск - Корпоративный мобайл 07 поминутно (гор/фед) (КОРП) (SS)") = 4
dict("Брянск - Телематика с 1 сек (фед) (КОРП) (SS)") = 5
dict("Брянск - Корпоративный мобайл 07 с 61 сек (гор/фед) (КОРП) (SS)") = 6
dict("Брянск - Телематика (КОРП) (SS)") = 7
dict("Брянск - МТС Коннект-4 (ПРП) (SCP)") = 8
dict("Брянск - Бизнес Эксперт (КОРП) (SS)") = 9
dict("Брянск - КОМАНДА07 с 61 сек (гор/фед) (КОРП) (SS)") = 10
dict("Брянск - Бизнес Коннект (КОРП) (SS)") = 11
dict("Брянск - Эксклюзив (гор/фед) (КК) (SS)") = 12
dict("Брянск - Телематика - 2012 (КОРП) (SS)") = 13
For Each key in dict.Keys
    if InStr(1,strTarif,key,1) > 0 Then
        id = dict(key)
        Exit For
    End if
Next

MsgBox id
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

5

Re: VBS: If Else OR Case select

Зачем создавать новый объект?! Лучше тогда уж через массив идти, наверное.

6

Re: VBS: If Else OR Case select

Согласен. Создание Dictionary мне тоже не нравится. Но если решать этот момент с массивами, то нужно либо 2 массива, либо двухмерный массив, либо одномерный, элементами которого являются массивы из двух элементов и т.п. ) Ну тоже не особо красиво.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

7

Re: VBS: If Else OR Case select

Господа, а вопрос-то стоит про Case select, а рассматривается всё, кроме сути вопроса. Думаю ответом будет удобней оставить оператор If Else, т.к. для осуществления через Case select мешает необходимость функции InStr.

Стремление - залог успеха

8

Re: VBS: If Else OR Case select

Lucky пишет:

.. для осуществления через Case select мешает необходимость функции InStr.

Да я бы не сказал, что особо мешает. Но как то криво, на мой взгляд.


Option Explicit

Dim id, strTarif
strTarif = "Брянск - КОМАНДА07 с 61 сек (гор/фед) (КОРП) (SS)"
Select Case True
Case InStr(1,strTarif,"Брянск - Корпоративный мобайл 07 поминутно (гор/фед) (КОРП) (SS)",1) > 0
    id = 4
Case InStr(1,strTarif,"Брянск - Телематика с 1 сек (фед) (КОРП) (SS)",1) > 0
    id = 5
Case InStr(1,strTarif,"Брянск - Корпоративный мобайл 07 с 61 сек (гор/фед) (КОРП) (SS)",1) > 0
    id = 6
Case InStr(1,strTarif,"Брянск - Телематика (КОРП) (SS)",1) > 0
    id = 7
Case InStr(1,strTarif,"Брянск - МТС Коннект-4 (ПРП) (SCP)",1) > 0
    id = 8
Case InStr(1,strTarif,"Брянск - Бизнес Эксперт (КОРП) (SS)",1) > 0
    id = 9
Case InStr(1,strTarif,"Брянск - КОМАНДА07 с 61 сек (гор/фед) (КОРП) (SS)",1) > 0
    id = 10
Case InStr(1,strTarif,"Брянск - Бизнес Коннект (КОРП) (SS)",1) > 0
    id = 11
Case InStr(1,strTarif,"Брянск - Эксклюзив (гор/фед) (КК) (SS)",1) > 0
    id = 12
Case InStr(1,strTarif,"Брянск - Телематика - 2012 (КОРП) (SS)",1) > 0
    id = 13
End Select
MsgBox id
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

9 (изменено: Rumata, 2013-03-22 16:17:00)

Re: VBS: If Else OR Case select

Lucky пишет:

а вопрос-то стоит про Case select, а рассматривается всё, кроме сути вопроса

Вы отчасти правы. Но важное не только ответить на вопрос, но дать правильное направление для дальнейших размышлений.

inock, отвечая на Ваш вопрос

Вот эту конструкцию можно сделать через оператор Case select?

скажу: можно, но так делать не надо.

Создайте список (через Dictionary или Array) и работайте с ним, циклически перебирая элементы списка. Это сократит количество кода, улучшит его понимание и дальнейшее сопровождение.

Поэтому правильным будет полный отказ от длинного списка проверок (не важно - If Else или Case) в пользу списка - в Вашем случае один простой, одномерный массив.

( 2 * b ) || ! ( 2 * b )