Текущий архив: 2003.03.03;
Скачать: CL | DM;
ВнизСвоеобразная Найти похожие ветки
← →
Сергей (2003-02-13 02:02) [0]Есть около 1500 строк таблицы из примерно 10 столбцов, каждая ячейка - string. Мне нужно организовать быстрый поиск и отображение. Выглядеть все должно примерно так: есть tedit, есть tstringgrid, при изменении текста в tedit автоматически (и быстро!) меняется содержимое tstringgrid. Связь на уровне наличия текста из tedit`а в одном (конкретном) из полей строки.
← →
Palladin (2003-02-13 02:11) [1]для быстроты тебе нужно использовать сортировку и бинарный поиск, быстрее некуда :)
← →
Сергей (2003-02-13 02:52) [2]проблема в том, что я ищу не строки как таковые, а элементы строк. То есть если строка у записи "Long long stick", то по запросу "ic" она тоже должна быть найдена. Как это сделать?
← →
Palladin (2003-02-13 03:30) [3]имхо
только перебор
← →
Сергей (2003-02-13 04:02) [4]Перебор, то перебор. Но сама функция, проверяющая наличие подстроки в строке как должна быть реализована? Я 100% уверен, что стандартная реализация оставляет желать лучшего. Строки не длинные.
Кроме того интересует непосредственная реализация. Как это правильно отображать? Мне что-то не хочется запихивать по 1500 строк в grid при каждом новом символе..
← →
stone (2003-02-13 09:30) [5]. > есть tedit, есть tstringgrid, при изменении текста в tedit
> автоматически (и быстро!) меняется содержимое tstringgrid
Если уж речь идет о базе данных, то лучше для отображения данных использовать TDBGrid и соответствующие компоненты доступа к данным.
> проблема в том, что я ищу не строки как таковые, а элементы
> строк. То есть если строка у записи "Long long stick", то
> по запросу "ic" она тоже должна быть найдена. Как это сделать?
запрос типа select * from MyTable where Field1 like "%ic%"
← →
uw (2003-02-13 09:47) [6]>stone © (13.02.03 09:30)
У него база данных в кавычках. А если бы была и настоящая, то такой select все равно перебирал бы все.
← →
Сергей (2003-02-13 13:09) [7]У меня нет конкретной базы. У меня есть просто информация. В файле. Я хочу чтобы моя программа работала на любом компе, и не хочу вместе с ней всем mysql раздавать. Порекомендуйте что-нибудь.. Мне нужно организовать подобие SELECT для моей таблицы. Не обязательно с нуля, но обязательно прозрачно для пользователя. Так, чтобы ему не пришлось ставить дополнительный софт.
← →
Anatoly Podgoretsky (2003-02-13 13:59) [8]uw © (13.02.03 09:47)
Понятие база наступает, когда мы начинаем упорядоченно к этому относиться и работать как с базой. Сама база физически может и отсутствовать, например TClientDataset, ему не требуется физическое наличие данных.
← →
uw (2003-02-13 17:30) [9]>Anatoly Podgoretsky © (13.02.03 13:59)
Всё, я в отпуске и на такие зловредные реплики не отвечаю. Когда вернусь, поговорим!
← →
Anatoly Podgoretsky (2003-02-13 17:50) [10]:-)
← →
MsGuns (2003-02-13 18:28) [11]Пиши вставку прямо на асме. Возвращает индекс найденной строки.
Если же хочешь, чтоб еще и в контроле все мгновенно отображалось, пиши на асме и свой контрол (типа стринггрида)
← →
Сергей (2003-02-13 19:34) [12]Спасибо, блин.
2Anatoly Podgoretsky
(Понятие база наступает, когда мы начинаем упорядоченно к этому относиться и работать как с базой. Сама база физически может и отсутствовать, например TClientDataset, ему не требуется физическое наличие данных)
А более приближенно к реальности можно? Конкретно - каким образом я могу запихать таблицу в этот самый dataset, и как я должен делать оттуда выборку?
2MsGuns
(Пиши вставку прямо на асме. Возвращает индекс найденной строки.
Если же хочешь, чтоб еще и в контроле все мгновенно отображалось, пиши на асме и свой контрол (типа стринггрида))
меня алгоритм интересует. Как максимально быстро проверить наличие подстроки в строке? Точнее в 1500 строках.
← →
MsGuns (2003-02-13 19:51) [13]Результат = 0
Цикл по строкам и Результат=0
Цикл по строке (пока "не равно" образцу) и (смещение < длины)
Модификация смещения
Возврат в начало цикла
Если смещение<Длины строки -> Результат = 1
Возврат в начало цикла
Что на асме, что на Паскале, что на Фортране - по барабану - если ты об алгоритме.
А вот скорость (т.е.кол-во выполненных инструкций) может быть совершенно разной - зависит от языка. Ничего быстрее асма, априори, быть не может.
← →
MsGuns (2003-02-13 19:51) [14]Результат = 0
Цикл по строкам и Результат=0
Цикл по строке (пока "не равно" образцу) и (смещение < длины)
Модификация смещения
Возврат в начало цикла
Если смещение<Длины строки -> Результат = 1
Переход на след.строку
Возврат в начало цикла
Что на асме, что на Паскале, что на Фортране - по барабану - если ты об алгоритме.
А вот скорость (т.е.кол-во выполненных инструкций) может быть совершенно разной - зависит от языка. Ничего быстрее асма, априори, быть не может.
← →
Anatoly Podgoretsky (2003-02-13 20:14) [15]MsGuns © (13.02.03 18:28)
Сергей (13.02.03 19:34)
Один из вариантов ускорения работы со StringGrid это работа в виртуальном режиме, отображать в нем не все строки, а только небольшое количество и динамически подкачивать в него данные. Сами данные можно хранить в чем угодно, хоть в StringList. Работать будет очень быстро, реализация конечно не очень простая, но есть готовые реализации на том же торри, еще вместо StringGrid можно использовть ListView, там это штатный режим.
Сергей (13.02.03 19:34)
Я тебе не могу представить готового примера для ClientDataset, я с ним мало работаю, но таких примеров видел много.
Посмотри что есть по этому поводу в хелпе, там есть готовые методы сохранение данных в файле в нескольких форматах.
ClientDataset очень удобен для работы с большими базами по низкосоростным каналам.
Тебе возможно стоит задать отдельный вопрос, спечиально по ClientDataset, тогда смогут подключиться люди которые с ним тесно работают, так его понимание не очень простое.
Кроме того можешь поискать на торри компоненты, которые работают с плоскими базами в текстовом формате, давно я видел один хороший, название не помню, но что то начинается с QDB, конечно есть еще много и других.
← →
Сергей (2003-02-13 20:44) [16]Это один из самых медленных алгоритмов для поиска подстроки. Можно гораздо быстрее, естесственно с предварительной подготовкой. Ладно, спасибо попробую поразбираться с dataset.
← →
Tux (2003-02-13 21:52) [17]НАСТОЯТЕЛЬНО И ОГЛУШИТЕЛЬНО ОРУ!!! ПРЕКРАТИТЕ ИЗОБРЕТАТЬ ВЕЛОСИПЕДЫ! ВСЕ ХРЕНОВО НАПИСАННЫЕ ПРОГРАММЫ - НА 99% - ОТ ХРЕНОВО НАПИСАННЫХ САМОДЕЛЬНЫХ АЛГОРИТМОВ!
Облегчил душу :)
Итак. Скачиваем MDAC 2.7. Создаем ODBC соединение, используя MS ODBC Driver для текстовых файлов. Файл может быть с фиксированной длиной полей либо с разделителями. Подключаемся через BDE либо OLEDB провайдера для ODBC драйверов. Используем вылизанные борландом компоненты для работы с БД. Тратим полчаса и наслаждаемся результатами. Можно делать селекты, делиты, апдейты и инсерты. Можно делать выборки из двух текстовых файлов как если бы мы работали с таблицами. Если вы работаете через ADO - воспользуйтесь прелестями ADORecordset.
Уф.
Все.
← →
Tux (2003-02-13 21:55) [18]Да, кстати, по скорости этот пресловутый драйвер оптимизирован на твердую четверку с твердым плюсом. Все равно лучше не напишете. За разумные сроки.
Кстати, оператор like тоже, представьте себе, работает.
← →
Сергей (2003-02-14 19:26) [19]Спасибо. Наконец-то рассказали как делать именно то, о чем я мечтал. Спасибо.
← →
Anatoly Podgoretsky (2003-02-14 19:34) [20]На здоровье, но про вывод бы рассказал все таки
← →
blackman (2003-02-14 20:55) [21]Однако посрамлены все. Работать это создание через ODBC или ADO будет так медленно и туго, что потом проще всего будет править эту базу в текстовом редакторе
Страницы: 1 вся ветка
Текущий архив: 2003.03.03;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.01 c