Название: QFile поиск по файлу без его загрузки в память Отправлено: virtual_root от Июль 25, 2012, 18:11 Ребят подскажите, пожалуйста, а можно ли найти сначало то что нужно в QFile, а потом загрузить в переменную? Или мне придется сначала весь файл считать? Просто у меня бинарный файл и я записала туда QMap. Теперь хочу просто не считывать все значения и ключи, а найти нужный ключ и уже тогда считать его значение. Так как файл большой. 220Кб и его размер будет расти...
Заранее извиняюсь за немного глупый вопрос, может я просто каких-то тонкостей не знаю :-[ Название: Re: QFile поиск по файлу без его загрузки в память Отправлено: ruzik от Июль 25, 2012, 21:17 Может я и ошибаюсь, но как можно найти значение среди массы других значений если вы не знаете последние.
Могу лишь предложить следующее: - Сделать что-то типа файлового бинарного дерева и оставить не один файл а например сделать файлы по первому символу данных которые нужно считать, то есть имеются такие строки: -AAA -BBB -CCC -CAA Значит 1 строка будет содержаться в файле "А"(тк начинается с А), вторая в "В", а 2 последних в "С". Если этого начнет не хватать, то можно подразделить дальше, то есть сделать, например не файл "С", а папку С, которая будет содержать 2 файла: С и А, по 2 буквам в нужных строках(2 последние строки в списке, начинающиеся с "С", поэтому находящиеся в папке "С") и так далее хоть до бесконечности. Хотя вполне возможно есть и другой, более адекватный выбор. Название: Re: QFile поиск по файлу без его загрузки в память Отправлено: _OLEGator_ от Июль 25, 2012, 22:19 Можно читать файл поблочно и искать в них.
Как сохраняешь QMap? Название: Re: QFile поиск по файлу без его загрузки в память Отправлено: Bepec от Июль 25, 2012, 22:49 Можно проще сделать - файл с данными + файл с ключами и их позициями.
Читаешь ключи, потом выдираешь блок данных с позиции из файла данных. Тут уже от того зависит, что у тебя там :D Название: Re: QFile поиск по файлу без его загрузки в память Отправлено: TemaTre от Июль 26, 2012, 06:06 По-моему тут стоит почитать про B-деревья.
В начале файла сохраняешь B-дерево(которое отсортировано по ключам). Считываешь его, по нему выполняешь поиск. И прыгаешь на нужное место в файле. Опять же может возникнуть проблема того что файл будет слишком большим но Дерево весит не так много. Да кстати и 200Кб это не очень то много, я бы сказал мало. Сколько у тебя на компе оперативки? Что жалко 200Кб? Если файл будет расти просто разбивать его на несколько файлов. Но в любом случае B-деревья тут подойдет больше всего. Они хорошо ускорят работу с файлами. Название: Re: QFile поиск по файлу без его загрузки в память Отправлено: _OLEGator_ от Июль 26, 2012, 10:22 Знатоки собрались, разбиение на фалы (индексация, создавать свою БД), B-дерево.
Тут же элементарный QMap последовательно записанный в файл ключ-значение, его также последовательно читаешь ключ и пропускаешь значение, пока не найдется нужный ключ. Название: Re: QFile поиск по файлу без его загрузки в память Отправлено: Bepec от Июль 26, 2012, 10:34 Так о том и речь идёт - долго сие, читать весь файл с перескакиванием :)
Получится простое чтение в память, не более или менее. Если элемент последний, то время ожидания будет ммм.. прикольным? :) Название: Re: QFile поиск по файлу без его загрузки в память Отправлено: virtual_root от Июль 26, 2012, 11:40 Ребята спасибо за ответы. А в файл я записываю следующую структуру:
Код Это ответ сервера, я пакую его в QList, QMap и записываю в файл. Я привела не полный ответ. Но при работе я запрашиваю определенные блоки ответов от сервера и записываю их в соответствующие файлы: рестораны, меню, блюда. А читаю я так: сначала мне нужно считать все рестораны и отобразить их на форме. Потом, когда пользователь выберет один из ресторанов мне нужно подгрузить на форму меню этого ресторана. Каждый ресторан имеет идентификатор который совпадает с его списком меню. Поэтому я и хотела из файла меню прочитать только то меню у которого идентификатор допустим 2901. Название: Re: QFile поиск по файлу без его загрузки в память Отправлено: kambala от Июль 26, 2012, 12:05 думаю стоит использовать базу данных
Название: Re: QFile поиск по файлу без его загрузки в память Отправлено: _OLEGator_ от Июль 26, 2012, 12:19 Так бы сразу. Конечно надо использовать БД (SQLite например), все распарсить и разложить по таблицам.
|