|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
03.02.2013, 11:53 | #1 |
Участник клуба
Регистрация: 14.06.2011
Сообщений: 1,138
|
Быстрое сохранение в середину файла
В общем, смысл такой:
самообучение программы автопереключения раскладки, аналог Punto. т.е. пользователь набирает слово в определенной раскладке и это слово сохраняется в файл. Но для быстрого поиска требуется (ну, я лишь такую реализацию быстрого поиска знаю) сохранение упорядоченного по алфавиту списка слов. Целиком перезаписывать файл с переупорядоченным по алфавиту словарем после каждого слова - работать будет, но дико тормозно. Дописывать слово в конец - абзац с поиском по неупорядоченному массиву. Плюс тоже частые обращения к диску. Еще можно особо не заморачиваться, а оставить винде самой решать когда делать flush отраженному в память файлу базы. Собственно вопрос: Есть ли другие, более изящные подходы к сохранению динамически изменяемых данных? Последний раз редактировалось Smogg; 03.02.2013 в 11:56. |
03.02.2013, 12:04 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
А просто завести БД?
I'm learning to live...
|
03.02.2013, 12:44 | #3 |
Участник клуба
Регистрация: 14.06.2011
Сообщений: 1,138
|
|
03.02.2013, 15:08 | #4 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Общего и универсального решения этой проблемы не существует: вставка в массив имеет сложность O(N).
Но слова можно хранить не только в массиве, но и, скажем, в списке или в дереве. Выбор конкретной реализация зависит от многих факторов. В Вашем случае не совсем понятно, зачем вообще нужна перезапись в файл чаще одного раза за запуск программы (в конце работы перед завершением). |
03.02.2013, 16:04 | #5 |
Участник клуба
Регистрация: 14.06.2011
Сообщений: 1,138
|
Я, например, не выключаю комп. Использую спящий режим. Перезагрузка только при зависе. То есть, всегда аварийный выход без сохранений.
|
03.02.2013, 16:33 | #6 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
03.02.2013, 18:40 | #7 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Цитата:
Во-первых, для достижения некоторых целей от некоторых привычек, возможно, стоит отказаться. Во-вторых, можно предусмотреть сохранение по таймеру, скажем, раз в 10 минут при наличии новых введенных за эти последние 10 минут слов. В-третьих, уже было предложено хранить новые слова не в массиве, а в списке или дереве. Так что на выбор - 3 варианта решения задачи. |
|
05.02.2013, 14:23 | #8 | ||
Участник клуба
Регистрация: 14.06.2011
Сообщений: 1,138
|
Цитата:
Плюс пустой файл базы уже величиной в метр. А может, кодер - идиот, если он не понимает сути БД. Цитата:
2.Да, если сохранять, то только по таймеру. 3.Список или дерево - избыточное усложнение. Или кодер - идиот. В общем, как я догадался, надо менять привычки и чтобы не было подвисаний во время сохранения, надо запись в файл выносить в отдельный процесс.) Тогда сохраняться втихушку можно хоть полчаса. //здесь "кодер" - это я |
||
05.02.2013, 14:38 | #9 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
Так зачем хранить в файле отсортированный список? Можно же при запуске проги читать его из файла и сортировать, а при добавлении слова дописывать в конец файла и в отсортированный список в памяти.
|
05.02.2013, 14:48 | #10 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Поддерживаю предложение Stilet-а - писать в базу данных. dbf с индексами не рекомендовал бы, а база Access для этой задачи в самый раз - и быстрый поиск и динамическое обновление данных. И наличие самого Access-а совсем не обязательно
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 05.02.2013 в 14:50. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Повреждение данных при записи в середину бинарного файла | Aerial | Общие вопросы C/C++ | 2 | 01.12.2011 19:32 |
Сохранение файла | RemiJK | Помощь студентам | 7 | 23.11.2011 16:53 |
сохранение файла... | evlampus76 | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 15.01.2011 15:17 |
Запись в середину файла | newkobra | Общие вопросы C/C++ | 12 | 22.03.2010 22:35 |
Сохранение файла | Македонский | Общие вопросы Delphi | 7 | 17.08.2007 08:35 |