Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.03.03;
Скачать: [xml.tar.bz2];

Вниз

Своеобразная   Найти похожие ветки 

 
Сергей   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.009 c
6-5698
Mischka
2003-01-14 10:41
2003.03.03
Юзер на удаленной машине


1-5490
AFrolov
2003-02-19 12:12
2003.03.03
Сравнение 2 строк как с помощью LIKE в SQL


1-5545
OneOfTheFew
2003-02-19 13:38
2003.03.03
Меню программы.Как прочитать из *.exe ?


14-5836
crushfm
2003-02-13 19:42
2003.03.03
Компоненты


3-5409
Cossys
2003-02-12 12:42
2003.03.03
Повреждение базы, Paradox 7.0





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский