Работа сфайлами в С++

программирование С++

Создал файл,периодически добавляются записи(например данные телефонных абонентов).Подскажите способ индексации этих данных,чтоб их можно было извлекать произвольно.Пока получается выводить весь список.Как извлечь из файла данные конкретного объекта?

Примечание:
YuriyPo
Слово СУБД для меня пока очень обстрактное понятие.

Примечание:
srs2k
Всё равно,как связать индексы из второго файла с данными в первом.
Я читал про хеш-функции,для оперативной памяти понятно.Вот для файлов не разберусь.

Примечание:
srs2k
И при этом использовать значения файлового курсора?

Примечание:
конструктор
У меня данные описаны как элементы класса.Если я введу поле для индекса,то мне всё равно гдето придётся хранить связку "индекс-данные".То есть опять приходим к созданию второго файла и хеш-функциям.

Примечание:
Mak1012
Данные являются строками разной длинны.Хотя я могу данные записывать поблочно (объекты класса) ф-цией fwrite() или перегрузив операторы >>,<<.Я использую второй способ.

Примечание:
srs2k
Спасибо,твой вариант подходит.Вопрос пока не закрываю.

Примечание:
ub
Я пока далёк от SQL и баз данных.Пока чистыйС/С++ на уровне второго семестра.
Ответы:
видимо использовать СУБД
Создать второй, индексный файл и периодически обновлять его
А ты опиши свои данные как структура, где цифра индекс записи.
Записи фиксированной или переменной длины?
Если записи фиксированной длины, то по номеру записи всегда можно вычислить положение начала записи в файле и прочитать с этого места.
Я так понимаю, у Вас имеется файл с записями, скажем
struct TAbonent { char *fio; char *addrr; char phone[7]; // ну и т.д.
};
Чтобы индексировать файл, скажем, по полю fio - понадобится файл записей следующего вида:
struct TAbonent_idxFio { char fio[32]; long idx; }
Для создания индекса проходим в цикле весь файл с абонентской базой и создаем индексные записи, копируя поле fio, а в idx записывая указатель на положение в файле базы этой записи.
Это самый примитивный и неоптимизированный способ реализации индексов.
Чем писать собственную БД, лучше взять готовое решение.
Я бы начал с SQLite. Она используется в файрфоксе и множестве других популярных программ.
Тогда проще:используй МАССИВ ОБЪЕКТОВ
Файл, отображаемый в память создавай - это как раз для произвольных обращений. Но по сложности если, то СУБД проще.


16 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.