|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
Всем привет! В конструкторе Access есть удобная инструкция IN Мне нужно то же самое, только в коде VBA Например: есть число 7 Как узнать, есть ли это число в списке чисел "3,18,15,389,45" ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2017, 16:39 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
Настаев, какой ваш вариант? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2017, 17:07 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
Вакшуль Сергей, в данном примере числа нет в указанном списке Я пишу в коде следующим образом (но это неудобно). Код: vbnet 1. 2. 3. 4. 5. 6.
Хотелось бы в одной строчке типа Код: xml 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2017, 17:24 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
НастаевКак узнать, есть ли это число в списке чисел "3,18,15,389,45" Код: vbnet 1.
Проверка в Immediate Код: vbnet 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2017, 18:34 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
Настаев Код: vbnet 1.
это все равно, что: Код: vbnet 1.
не пойму как вы "число" сравниваете со строкой "2,4,5,788,28". Вы должны получать Type mismatch ошибку выполнения Может вы пытаетесь сделать что-то подобное? Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Вызов: Код: plaintext
я не понял ваших сложностей. вы зашили список значений в код "2,4,5,788,28" т.е. он не меняется. Тогда, что значит ваше "это неудобно", если он неизменный и вы его уже перечислили. Если массивы не нравятся, попробуйте коллекции: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2017, 18:53 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
с текстом сообщения "числа 11 нет в списке" я намутил, но суть понятна: обращаясь по интересуемому значению к коллекции можно понять есть ли такой элемент в коллекции или нет ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2017, 19:07 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
Вакшуль Сергей, я случайно написал в кавычках список значений, испльзуя Select Вариант с использованием Like отлично подходит. Как я сам не дагадался? :) да, список чисел у меня статичный, меняется только число Всем спасибо за помощь... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2017, 19:34 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
кстати, решил проверить, что быстрее сравнение like-ом Код: vbnet 1.
или при использование коллекции Коллекция быстрее. Но все, конечно, определяется контекстом. Option Explicit Private Declare Function GetTickCount Lib "kernel32" () As Long Sub TestComp() Dim idsList As New Collection Dim startTime, diffTime As Long Dim i As Long Dim result As String Dim strList As String Dim blnComp As Boolean Dim counter As Long counter = 9999 For i = 0 To counter idsList.Add i, CStr(i) Next i startTime = GetTickCount For i = 0 To counter blnComp = idsList(CStr(i)) = i Next i diffTime = GetTickCount - startTime Debug.Print "Использование коллекции. Считываний: " & counter + 1 & " раз. Время: " & diffTime '===================================== strList = "," For i = 0 To counter strList = strList & i & "," Next i startTime = GetTickCount For i = 0 To counter blnComp = strList Like "*," & CStr(i) & ",*" Next i diffTime = GetTickCount - startTime Debug.Print "Использование Like. Считываний: " & counter + 1 & " раз. Время: " & diffTime End Sub Код: vbnet 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2017, 21:18 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
Настаевда, список чисел у меня статичный, меняется только числоНастаевХотелось бы в одной строчке типа Код: vbnet 1.
Вы так, наверно, хотели? Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2017, 21:35 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
Вакшуль СергейНастаевда, список чисел у меня статичный, меняется только числоНастаевХотелось бы в одной строчке типа Код: vbnet 1.
Вы так, наверно, хотели? Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
да, именно так я и сделал Но я тут прочитал про коллецкию и понял, что мне нужна скорость ))) Хорошо, что есть форум ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2017, 21:47 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
Вакшуль Сергейкстати, решил проверить, что быстрее сравнение like-ом Код: vbnet 1.
или при использование коллекции Коллекция быстрее. Но все, конечно, определяется контекстом. Option Explicit Private Declare Function GetTickCount Lib "kernel32" () As Long Sub TestComp() Dim idsList As New Collection Dim startTime, diffTime As Long Dim i As Long Dim result As String Dim strList As String Dim blnComp As Boolean Dim counter As Long counter = 9999 For i = 0 To counter idsList.Add i, CStr(i) Next i startTime = GetTickCount For i = 0 To counter blnComp = idsList(CStr(i)) = i Next i diffTime = GetTickCount - startTime Debug.Print "Использование коллекции. Считываний: " & counter + 1 & " раз. Время: " & diffTime '===================================== strList = "," For i = 0 To counter strList = strList & i & "," Next i startTime = GetTickCount For i = 0 To counter blnComp = strList Like "*," & CStr(i) & ",*" Next i diffTime = GetTickCount - startTime Debug.Print "Использование Like. Считываний: " & counter + 1 & " раз. Время: " & diffTime End Sub Код: vbnet 1. 2.
Спасибо за этот пример. Мне он как раз к стати. Я добавил в избранное. Сейчас буду применять ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2017, 21:49 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
НастаевХорошо, что есть форум хорошо, что есть интернет. но вот я не пойму, как вы выделив в коде "case" и нажав F1, не увидели ответ на свой вопрос ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2017, 21:51 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
Вариация с отвязанным рекордсетом осталась нераскрыта. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2017, 21:56 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
самый простой способ, через функцию Filter Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Код: plaintext 1. 2.
Только нужно учитывать, что она работает со строками, и ищет по подобию. Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2017, 10:35 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
Если ужо тредстартеру так втемяшилось, то, проще, функцию написать Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2017, 14:57 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
Filter,самый простой способ, через функцию Filter... Только нужно учитывать, что она работает со строками, и ищет по подобию.учесть это можно, например, так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
сейчас заодно и посмотрим, что будет быстрее коллекции или использование Filter. Сейчас.... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2017, 15:14 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
не знаю, чего я вцепился в это сравнение. Но скорость работы с коллекциями действительно удивила. Тестовый стенд: Код: 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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134.
Код: vbnet 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2017, 16:14 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
Сергей немного слукавил, вынеся этап заполнения коллекции из замеров времени и не обрабатывая вариант отсутствия искомого. Для чистоты эксперимента, было бы правильнее привести все варианты к "общему знаменателю". Например, взять три исходных строки: короткую vbnullstring (нет значений), среднюю (десяток значений) и длинную (сотню значений). Описать все варианты функцией "под ключ" с аргументами - строкой и искомым. И сравнить на разных исходных строках, с нахождением искомого в начале, середине, конце исходной строки и отсутствии в исходной строке искомого. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2017, 16:30 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
Predeclared, я в самом начале сделал оговорку: Вакшуль СергейКоллекция быстрее. Но все, конечно, определяется контекстом. насчет вот этого замечания: PredeclaredСергей немного слукавил, вынеся этап заполнения коллекции из замеров времени это не лукавство, а аспект того самого "контекста". Конечно, если на вход пришла строка, то о какой коллекции можно говорить. Тут уже придется работать со строкой. Меня больше интересовала именно скорость обращения к элементу. Скорость считывания. Скорость считывания в цикле. Вообще интерес скорее более академический, чем прикладной. Собственно, о чем я думал. Понятно, что в основе наверно любого метода лежит перебор(если нет прямой ссылки на области памяти). Так или иначе, но перебор. Просто перебор, производимый функцией InArr от aleks222 был бы самым быстрым(т.к. перебор прекращается сразу, как только Enumerator доходит до нужного элемента, в то время как Filter лопатит массив полностью), если бы он производился не в медленном интерпретаторе VBA. Вот собственно это и было сравнение возможностей внешних ресурсов применительно к заинтересовавшему меня аспекту. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2017, 17:13 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
Вакшуль Сергей... Конечно, если на вход пришла строка, то о какой коллекции можно говорить. Тут уже придется работать со строкой... А почему бы и нет? Раскидать части строки по элементам коллекции тоже вариант. Я сейчас аккурат "развлекаюсь" над вариантами. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2017, 17:30 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
PredeclaredРаскидать части строки по элементам коллекции используя для этого цикл в интерпретаторе? Это должно быть долго ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2017, 17:35 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
И потому ты вынес "тяжелую" часть за рамки замера скорости. :) Я надеялся на выигрыш в скорости (перед массивом) в варианте, когда искомое находится в конце исходной строки, но "заливка" коллекции съела весь выигрыш в скорости поиска. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2017, 18:05 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
Predeclared, ну да, вынес. Ну, я же говорю, интересовало считывание :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2017, 18:10 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
Predeclaredно "заливка" коллекции съела весь выигрыш в скорости поиска. это смотря сколько раз считывать ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2017, 18:16 |
|
Есть ли число в списке чисел (то же что IN(...), только в коде)
|
|||
---|---|---|---|
#18+
Я рассматривал (в данном контексте вопроса) варианты функции "All in One", без внешних (от тела функции) описаний. Для описания реализации других вариантов пока нет информации о необходимой частоте пользования данной функцией, количестве исходных строк и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2017, 18:24 |
|
|
start [/forum/topic.php?fid=45&msg=39547844&tid=1611932]: |
0ms |
get settings: |
11ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 259ms |
total: | 402ms |
0 / 0 |