Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Можно ли записать через оператор Case?

248
13 мая 2009 года
Dmitry2064
590 / / 06.12.2006
Сейчас так:
 
Код:
If InStr(NameDOC, "11") Or InStr(Path1, "12") Then mName = "Документ1"
If InStr(NameDOC, "22") Then mName = "Документ2"
If InStr(NameDOC, "33") Then mName = "Документ3"
If InStr(NameDOC, "44") Then mName = "Документ4"


Можно ли записать все это более красиво через оператор Case?
7
13 мая 2009 года
@pixo $oft
3.4K / / 20.09.2006
Можно,конечно!А что мешает?:)[Highlight=VBNET]Select Case True
Case InStr(NameDOC, "11") Or InStr(Path1, "12")
mName = "Документ1"
Case InStr(NameDOC, "22")
mName = "Документ2"
Case InStr(NameDOC, "33")
mName = "Документ3"
Case InStr(NameDOC, "44")
mName = "Документ4"
End Select[/Highlight]Как-то так…Сам такую проблему решал несколько раз;насколько помню,удачно
248
14 мая 2009 года
Dmitry2064
590 / / 06.12.2006
Цитата: @pixo $oft
Можно,конечно!А что мешает?:)[Highlight=VBNET]Select Case True
Case InStr(NameDOC, "11") Or InStr(Path1, "12")
mName = "Документ1"
...



Стал экспериментировать и не получилось. Тогда сделал так:
iss = False
Select Case iss
Case InStr(NameDOC, "11")
iss = True: mName = "Документ1"
...
End select

т.е., видимо, по условию True не работает, нужно обязательно указать какую-нить переменную.

5.9K
15 мая 2009 года
SPB-667
119 / / 23.06.2007
Ну, с переменной оно, конечно, надёжнее, но у меня в подобных случаях и при использовании True или False код работал адекватно :)
47K
16 мая 2009 года
DISStudio
4 / / 15.02.2009
Можно и через If..ElseIf..End If:

If InStr(NameDOC, "11") Or InStr(Path1, "12") Then
mName = "Документ1"
ElseIf InStr(NameDOC, "22") Then
mName = "Документ2"
ElseIf InStr(NameDOC, "33") Then
mName = "Документ3"
ElseIf InStr(NameDOC, "44") Then
mName = "Документ4"
End If
7
16 мая 2009 года
@pixo $oft
3.4K / / 20.09.2006
Это громоздко и непредставительно.Автор топика получил свой ответ и остался им доволен–ему нужно было именно через Case
248
19 мая 2009 года
Dmitry2064
590 / / 06.12.2006
Интересно, что сегодня получилось и без доп. переменной. Т.е. именно так, как подсказал уважаемый [COLOR="DarkRed"]@pixo $oft[/COLOR].
А вот такой вопрос.
И If...elseif и case перебирают все подряд, пока не наткнутся на выполнение условия.
А есть switch:
mName = Switch(InStr(NameDOC, "11") и т.д.
Т.е. выбирается нужный вариант сразу без перебора всех предыдущих (ненужных). Но вроде, в switch есть ограничение на кол-во вариантов. или это мне кажется? Если надо обработать 1000 вариантов, чем удобнее было бы производить выбор?

Спасибо.
7
19 мая 2009 года
@pixo $oft
3.4K / / 20.09.2006
Тут 2 варианта:
0)этот оператор тоже перебирает всё подряд,только сия операция перебора скрыта в нём(инкаспуляция это вроде;поправьте меня,если я не прав:o)
1)насчёт ограничения не знаю,это надо смотреть в сторону ParamArray для Variant.А вот теперь подумайте сами:вам удобнее будет разбирать(читать) конструкцию,записаннуй в строчку и не влезающую в экран(комбинация со знаком "_" и переносом строки не катит–не так уж она удобна) или структурированную конструкцию Select case?

Я бы остановился на 2м…хотя для 1000 вариантов наверняка есть другой способ
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог