powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Найти похожее значение в ListBox
8 сообщений из 8, страница 1 из 1
Найти похожее значение в ListBox
    #32392951
timur-kar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Условие:
есть слово (word_1), например "телевизор"
есть лист-бокс (lbx_1) содержащий пункты:
магнитофон
холодильник
телевизоры
пылесос

вопрос: как в ListBox'е можно поставить курсор на наиболее похожее слово, т.е. на строчку, которая содержит максимальное кол-во совпадающих букв слева ?
...
Рейтинг: 0 / 0
Найти похожее значение в ListBox
    #32392952
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Написать программу, которая будет перебирать все значения в листбоксе и находить наиболее подходящее. Это не так просто, например если при том же списке будет введено слово телефон.
...
Рейтинг: 0 / 0
Найти похожее значение в ListBox
    #32392955
Спасибо
Вроде написал:


Код: plaintext
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.
Sub test_a()
    Dim words_a As Variant
    Dim c_word As String
    Dim match_word_i As Integer
    Dim searching_word As String
    Dim searched_word_no As Integer
    Dim i, j As Integer
    
    words_a = Array( "пылесосы" ,  "телевизоры" ,  "телефоны" ,  "мобильники" ,  "телики" ,  "мониторы" )
    searching_word =  "телевизор" 
    
    
    
    searched_word_no =  0 
    ' проходимся по буквам искомого слова
    For j = 1 To Len(searching_word)
        ' проходимся по словам
        For i =  1  To UBound(words_a)
            c_word = words_a(i)
            If Left(c_word, j) = Left(searching_word, j) Then searched_word_no = i
        Next i
    Next j
    If searched_word_no <>  0  Then Debug.Print words_a(searched_word_no)
    

End Sub
...
Рейтинг: 0 / 0
Найти похожее значение в ListBox
    #32392961
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Спасибо не надо, я почти ничего не ответил. Программа красивая.

Правда, если будут два одинаково подходящих слова (введено телики, а в списке есть телевизоры и телефоны), то будет найдено последнее из них, а не первое. Поэтому я пустил бы цикл по словам от конца к началу.
...
Рейтинг: 0 / 0
Найти похожее значение в ListBox
    #32392965
все равно большое спасибо. я бы не начал писать программу если бы так не сказал сам Владимир Саныч, все искал бы другие пути решения :)


Правда, если будут два одинаково подходящих слова (введено телики, а в списке есть телевизоры и телефоны), то будет найдено последнее из них, а не первое. Поэтому я пустил бы цикл по словам от конца к началу.


я тоже обратил на это внимание :) но это не важно заказчику (там все рубрики по алфавиту, и он сразу увидит все похожие)

а вообще в программе использую ListBox и параллельный ему recordset (т.е. lbx.rowsource="запросу из которого открылся recordset", ListBox для отображения, а recordset - как раз для поиска строки. Столкнулся с тем что медленно работает (там приходится искать в ~2000 рубриках), похоже придется применять фильтр на первую букву (т.е. чтобы он искал только среди тех которые начинаются с той-же буквы)
---------------------------------------
С уважением, Каримбаев Тимур
...
Рейтинг: 0 / 0
Найти похожее значение в ListBox
    #32392967
с фильтром отлично работает !
2780 записей - ищет в момент !
спасибо большое !!!

P.S.: только сейчас заметил что топик открыл как гость :)

---------------------------------------
С уважением, Каримбаев Тимур
...
Рейтинг: 0 / 0
Найти похожее значение в ListBox
    #32392968
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Если список отсортирован по алфавиту, то программу можно оптимизировать и проходить по 2000 слов не 5 раз, а 1. Идея в следующем: ищем по одной букве, находим первое слово, останавливаемся; ищем по двум буквам начиная с этого же слова (не с начала списка), находим, останавливаемся; и т.д.; если на очередное количество букв слово не найдено (или искомое слово уже вошло полностью), то ответом является последнее найденное.
...
Рейтинг: 0 / 0
Найти похожее значение в ListBox
    #32392970
да....ваше решение в разы оптимальнее :) буквально "в разы" :)
у меня и так - если на какой-то не найдено, то ответом является либо последнее найденное, либо 0 (если найденных не было)
у вас просто более системное решение, я сразу обрубаю первую букву, вы после каждого прохода: первую, две первых, три первых и так пока не будет совпадений.
Ну что-ж, как говорится - "век живи - век учись"
еще раз огромное спасибо за внимание к проблемам начинающих программистов

---------------------------------------
С уважением, Каримбаев Тимур
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Найти похожее значение в ListBox
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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