powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Переменная в операторе ветвления.
25 сообщений из 44, страница 1 из 2
Переменная в операторе ветвления.
    #39737121
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В очень многих местах кода используется оператор ветвления с одним и тем же набором условий.
А именно
"Рога", "Справки", "Копыта", "Шапки"

Код: vbnet
1.
2.
 Select Case KOGO_VIBRATb
 Case "Рога", "Справки", "Копыта", "Шапки"



подскажите как можно записав эту строку в коде единожды в переменную или ещё во что,
что бы каждый раз не писать этот набор
Код: vbnet
1.
 "Рога", "Справки", "Копыта", "Шапки"


а подставлять короткую замену типа:
Код: vbnet
1.
2.
3.
4.
 
NABOR =  "Рога", "Справки", "Копыта", "Шапки"
Select Case KOGO_VIBRATb
 Case NABOR 



------------------------------------------------------------------------
Спасибо за ответ.
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737172
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
час58,

Где-то в начале:
Код: vbnet
1.
2.
3.
Dim NABOR As String
Dim KOGO_VIBRAT As String
NABOR = "Рога Справки Копыта Шапки"


Потом процедура:
Код: vbnet
1.
2.
3.
4.
5.
6.
Public CHAS58 Function (NABOR As String, VXOD As String) As Long
CHAS58 = 0
On error GoTo er1
CHAS58 = InStr (NABOR, VXOD)
er1:
End  Function


Как пользоваться:
Код: vbnet
1.
2.
3.
4.
5.
If CHAS58 (NABOR, KOGO_VIBRAT) = 0 Then
MsgBox "Не входит в набор"
Else
MsgBox "Входит"
End If


Ну как бы Case тут наверно не в кассу, наверно нужно If -ы использовать типа...
Код: vbnet
1.
2.
3.
NABOR =  "Рога Справки Копыта Шапки"
KOGO_VIBRAT = "Рога"
If CHAS58 (NABOR, KOGO_VIBRAT) > 0 Then ....


Единственное нужно проанализировать варианты типа не сработает ли слово "правки" из-за "Справки",
если такая вероятность есть, то функцию нужно переделывать (NABOR сделать не строку, а массив или временную табличку со значениями)

Ну или я тебя не понял....
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737183
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmagесли такая вероятность есть, то функцию нужно переделывать (NABOR сделать не строку, а массив или временную табличку со значениями)
а если ее нет, то тупо используй
Код: vbnet
1.
If InStr (NABOR, KOGO_VIBRAT) > 0 Then....
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737184
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag,

Да "правки" и "Справки" это конечно - да.
Ты советуешь ИФами пользоваться...
Надо подумать.
Слишком до фига этих case, к тому же там ветвления не одного порядка...
потому хотел придумать изврат именно с case...
в любом случае. спасибо за совет.
Надо подумать.
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737187
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag,

А CASE с Instr() - не дружат?
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737193
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
час58потому хотел придумать изврат именно с case...

Если набор будет не строка а строки или элементы массива строк, то можно так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
s1 = "Рога"
s2 = "Копыта"
'.....
Select Case KOGO_VIBRAT
Case s1, s2
MsgBox "Да"
Case Else
MsgBox "Нет"
End Select
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737195
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
    Dim dct As Object
    Dim KOGO_VIBRATb As String
    Dim Worlds(0 To 2)
    Dim i As Integer, j As Integer
    
    KOGO_VIBRATb = "Усы"
    Worlds(0) = Array("Рога", "Справки", "Копыта", "Шапки")
    Worlds(1) = Array("Усы", "Лапы", "Хвост")
    Worlds(2) = Array("Капуста", "Картошка", "Морковь")
    
    Set dct = CreateObject("Scripting.Dictionary")
    For j = LBound(Worlds) To UBound(Worlds)
        For i = LBound(Worlds(j)) To UBound(Worlds(j))
            dct.Add Worlds(j)(i), j
        Next i
    Next j
    
    If dct.Exists(KOGO_VIBRATb) Then
        Select Case dct.Item(KOGO_VIBRATb)
            Case Is = 0
            Debug.Print 0
        Case Is = 1
            Debug.Print 1
        Case Is = 2
            Debug.Print 2
        End Select
    Else
        Debug.Print "Нету такового!"
    End If
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737196
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
час58А CASE с Instr() - не дружат?

выход из Instr ноль или число, подумай...
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737197
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если набор будет не строка а строки или элементы массива строк, то можно так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
s1 = "Рога"
s2 = "Копыта"
'.....
Select Case KOGO_VIBRAT
Case s1, s2
MsgBox "Да"
Case Else
MsgBox "Нет"
End Select



Но тада это тоже самое

Код: vbnet
1.
2.
Select Case KOGO_VIBRAT
Case "Рога", "Справки", "Копыта", "Шапки"
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737198
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmagчас58А CASE с Instr() - не дружат?

выход из Instr ноль или число, подумай...
чёт башка совсем не варит.
Уже полночь близится.
Надо отложить это до завтра.
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737199
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Predeclared,

чуть мозг не сгорел...
:)
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737200
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Predeclared,

Scripting.Dictionary....
Вон как ?!
Высший пилотаж аж.
Надо будет завтра поюзать.
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737203
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
час58,
создал таблицу "tblSpravka", упрощенно
ID_Check Parent Naim1 0 Константы 2 1 Общий, Частный3 1 Рога, Справки, Копыта, Шапки
создал функцию типа
Код: vbnet
1.
2.
3.
4.
5.
6.
Public function FromSprav(Vid&) as string
Dim prov,  str$
prov=Dlookup("[Naim]","tblSpravka", "[ID_Check]=" & Vid)
If isnull(prov) then str=vbnullstring else str=Cstr(prov)
FromSprav=str
exit function


Вызывается так FromSprav(3)
Родитель для создания самообъединения и редактирования.
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737204
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmagPredeclared,

чуть мозг не сгорел...
:)
Надо регулярно периодически охлаждать.
Есть вкусный хладогент: Beluga
:)
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737205
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alecko,

Спасибо.
А где тут ветвление CASE ?

мне бы
Код: vbnet
1.
2.
 Select Case KOGO_VIBRATb
 Case "Рога", "Справки", "Копыта", "Шапки"



вместо строки
Код: vbnet
1.
 "Рога", "Справки", "Копыта", "Шапки"



подставлять переменную(функцию), содержащую эту строку

типа
Код: vbnet
1.
2.
3.
NABOR =  "Рога", "Справки", "Копыта", "Шапки"
Select Case KOGO_VIBRATb
 Case NABOR 
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737208
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
Select case KOGO_VIBRATb
case fromsprav(3)
case fromSprav(2)
...
end select
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737211
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alecko,

Но тогда получается - таблица вроде как и не нужна?
Внутри функции
Код: vbnet
1.
 Public function FromSprav()


организовать своё ветвление на CASE
а в программе, просто обращаться к этой функции
Код: vbnet
1.
2.
 Select Case KOGO_VIBRATb
case fromsprav(3)



или я туплю?
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737217
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно и в функции в чистом виде хранить
но константы нужно заводить в таблицу (если "Шапки" у клиента станут "Фуражками", количество аргументов уменьшится/увеличится, в код лезть будет необязательно)
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737220
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если аргументов таки немного то делают так
в шапке модуля где хранится функция записывают
Код: vbnet
1.
2.
3.
4.
5.
Enum V2Sprav
    GolUbors= 3
    Events = 2
End Enum
Public function FromSprav(vid as V2Sprav)


в этом случае при выборе аргумента будет помощь
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737237
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
час58vmag,

А CASE с Instr() - не дружат?
Подружить надо :)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Function cl(virez As String)
vi = "один,два,три"
ggg = Mid(vi, IIf(InStr(1, vi, virez) > 0, InStr(1, vi, virez), 1), Len(virez))
Select Case virez
    Case ggg
        MsgBox "входит"
    Case Else
        MsgBox "не входит"
End Select
End Function
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737260
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zimkon, привет!

Твой вариант тоже наткнется на такие грабли:
vmagЕдинственное нужно проанализировать варианты типа не сработает ли слово "правки" из-за "Справки",

не смотря на большее количество InStr чем в моем примере + Mid + IIF
:)

Выход проще, в моем примере с одним InStr (как и в твоем нужно только причесать данные):
1. Общий пакет (строку) оформлять например так:
"@Рога@Справки@Копыта@Шапки@"
2. Искать в ней например это
"@Рога@" найдется
"@правки@" не найдется
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737261
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче,
Если причесать данные так как выше, то хватит одной строки
Код: plsql
1.
If InStr (NABOR, KOGO_VIBRAT) > 0 Then....
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737267
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PredeclaredЕсть вкусный хладогент: BelugaХм... На вкус и цвет... Обычная водяра.
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737270
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmagzimkon, привет!

Твой вариант тоже наткнется на такие грабли:
vmagЕдинственное нужно проанализировать варианты типа не сработает ли слово "правки" из-за "Справки",

не смотря на большее количество InStr чем в моем примере + Mid + IIF
:)

Выход проще, в моем примере с одним InStr (как и в твоем нужно только причесать данные):
1. Общий пакет (строку) оформлять например так:
"@Рога@Справки@Копыта@Шапки@"
2. Искать в ней например это
"@Рога@" найдется
"@правки@" не найдется
Привет! Я подумал об этом через минуту после того, как нажал опубликовать. Лень было пост править.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 Public Function cl(virez As String)
vi = ",один,два,три,"
ggg = Mid(vi, IIf(InStr(1, vi, "," & virez & ",") > 0, InStr(1, vi, "," & virez & ",") - 1, 1), Len(virez))
Select Case virez
    Case ggg
        MsgBox "входит"
    Case Else
        MsgBox "не входит"
End Select
End Function 
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737274
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очепятка ...не - 1, а + 1
...
Рейтинг: 0 / 0
25 сообщений из 44, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Переменная в операторе ветвления.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]