![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
suvolod |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 20.8.2005 Репутация: нет Всего: 1 |
Доброе время суток. Пишу прогу-запоминалку иностранных слов (VC++ 2005). И не знаю, как лучше (правильнее) организовать словарик. Точнее, взаимодействие его с моей прогой. В словаре будет порядка тысячи слов (хотя будут словари и на 5, и на 10 тысяч слов), сам словарь хотелось-бы реализовать в виде текстового UNICODE файла - для облегчения редактирования, чтобы юзеры могли редактировать словарь в том редакторе, который им привычнее, а при необходимости использовать (импортировать) в свои собственные программы. Одним словом, основных файлов будет 2. Один - словарь, другой - файл статистики, по которому будет накапливаться кол-во правильных ответов, штрафные баллы и другая информация.
Вопрос - как лучше реализовать взаимодействие этих файлов, в каком формате реализовать файл статистики. Без БД приходит на ум только один вариант: слова из словаря подгружаются в мою программу + открывается файл статистики. Как только выбрано очередное слово - в цикле в файле статистики ищется совпадение. Если найдено - информация об этом слове (баллы, и т.д) дописывается в соответствующую строку статистики. Если нет - создается новая запись по этому слову в файле статистики. Этот вариант меня смущает по нескольким причинам - на каждое слово придется использовать многократный циклический перебор по всему файлу статистики. Если замутить это на БД и делать выборку через Select, то насколько это оправдано? Ведь записей в среднем будет от 1000 до 5000... может простой перебор будет работать быстрее. И потом, надо будет программно создавать новый файл статистики (новый файл БД), прописывать его в Администрирование -> Источники данных (ODBC) и т.д. Как я понимаю, у юзера должна быть поддержка БД, а вдруг ее нет (соответствуюещго софта не установлено)... получается моя программа вообще не заработает. P/S. Если в своих рассуждениях по базам данных где-то сморозил глупость - не пинайте сильно. Что такое реляционная БД и основные термины знаю, но опыта практического использования почти нет ... разве что пара лаб в институте, да и то на Делфи. Это сообщение отредактировал(а) suvolod - 11.8.2010, 08:35 |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
необязательно. допустим, в памяти хранится множество слов с атрибутами. слова - из словаря, атрибуты - из статистики. Т.е. вообще всю информацию можно хранить в одном файле: одна строчка - одно слово плюс статистика. Правда, пользователь эту статистику тоже сможет видеть и редактировать. Т.е. в памяти получается структура типа std::map<слово,атрибуты>, в файле слово представлено строкой вида <слово> <кол-во правильных ответов> <штрафные баллы>... Если нужно статистику хранить раздельно по каждому случаю и иметь возможность обработки, можно иметь не один набор атрибутов, а их список. Хранение такое же, в одном файле. В этом случае в памяти что-то типа std::map<слово,std::list<атрибуты>>, в файле <слово> {<кол-во правильных ответов> <штрафные баллы>...},{<кол-во правильных ответов> <штрафные баллы>...}... если обработка требуется серьезная, можно и легкую БД использовать, например SQLite. Добавлено через 5 минут и 10 секунд кстати, если однозначно нужно разделить словарь и статистику, а статистику очень хочется хранить в порядке поступления, можно сделать следующее: в памяти организуется по второму варианту. в файлах хранится раздельно. во время работы статистика дописывается в память, записи помечаются как новые. при выходе новые записи дописывается файл статистики. |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
suvolod, не нужно перебирать все и вся. Используйте деревья или хеши. Хорошо подобранное и сбалансированное дерево подойдет лучше всего.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
suvolod |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 20.8.2005 Репутация: нет Всего: 1 |
Спасибо за ответы. Для себя я понял главное - что реализовать такой проект можно и без привлечения БД. Во всяком случае, предостережений на этот счет от вас не было. Статистику я действительно хотел хранить отдельно. Во первых, чтобы не засорять словарь - он будет простого и понятного формата типа
на русском|на китайском|транскрипция А статистика будет создаваться на каждого пользователя отдельно. А чтобы для корректировки обычным юзером она была недоступна - создам байт-файл (а не текстовой), ну и плюс к этому небольшая шифровка - проXORю, например. Уменьшить количество переборов я хотел за счет того, что файл статистики буду создавать в виде заранее отсортированного списка. Поиск по нему быстрее.. Хотя покурю информацию и про хеши с деревьями - если алгоритмы будут не очень сложными в реализации, можно попробавать и что-то из этого. Это сообщение отредактировал(а) suvolod - 11.8.2010, 11:59 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |