Вопрос

Я занят программированием класса, который создает индекс из текстового файла ASCII/BINARY.Моя проблема в том, что я не знаю, с чего начать.У меня уже было несколько попыток, но ни одна из них мне не помогла.Мне НЕ нужно искать адрес файла через MFT.Просто загрузите файл и найдите что-нибудь гораздо быстрее, выполнив поиск ключа в индексном файле и перейдя в текстовый файл по указанному адресу.

Индексный файл должен быть построен следующим образом:

KEY        ADDRESS  
  1        0xABCDEF    
  2        0xFEDCBA    
  .           .  
  .           .  

У нас есть текстовый файл со следующим примером значения:

1, 8752 FW,
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++, 
******************************************************************************, 
------------------------------------------------------------------------------;

Надеюсь, это немного лучше объясняет мой вопрос.Спасибо!

Это было полезно?

Решение

Мне кажется, что все, что нужно вашему классу, - это сохранить массив указателей или начальных смещений файла в ключевых местах файла.

Это действительно зависит от того, что обозначают ваши ключевые местоположения.

Я бы посоветовал вам получить доступ к файлу через ваш класс с помощью некоторых открытых методов. Затем вы можете легче связать ключевые местоположения с записанными данными.

Например, ваши ключевые местоположения могут находиться там, где начинается каждый новый блок данных, записанный в файл. например первый блок 1000 байтов, расположение ключа 0; второй блок 2500 байт, расположение ключа 1000; третий блок 550 байт; ключевое местоположение 3500; следующий блок будет 4050 при условии, что 0 - это первый байт.

Сохраните значения ключа в массиве переменной длины, и тогда вы сможете легко получить начальную точку для блока данных.

Если ваша ключевая точка обозначена каким-либо ключевым символом, вы можете использовать тот же класс, но с небольшим изменением, чтобы сохранить место хранения ключевого значения. Самый простой способ - пошагово просматривать данные до тех пор, пока не будет найден ключевой символ, считая количество символов, проверенных на ходу. Затем счетчик используется для определения вашего ключевого местоположения.

Другие советы

Ваш фрагмент кода — это не столько идея, сколько функциональность, которую вы хотите получить в конечном итоге.

Помните, что «индексирование» означает просто «запоминание», где находятся объекты.Вы можете сделать это, используя любую структуру данных, которую пожелаете...B-дерево, красное/черное дерево, BST или более сложные структуры, такие как суффиксные деревья/суффиксные массивы.

Я рекомендую вам изучить такие структуры данных.

редактировать:

Учитывая новую информацию, я бы предложил выполнить собственный поиск по ключу/значению.Создайте массив ключей и каким-то образом свяжите их значения.это может означать создание класса или структуры, которая содержит и ключ, и значение, или вместо этого содержит ключ и указатель на структуру или класс со значением и т. д.

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

Аналогичным образом можно построить хеш-таблицу.вы можете построить BST или подобную структуру, как я упоминал ранее.

Я все еще не совсем понимаю вопрос (работайте над вопросом, задавая skillz), но насколько я могу судить, алгоритм будет таким:

<Ол>
  • сканирует файл линейно, первое значение вплоть до первой запятой (',') является ключом, вероятно. Все остальные ключи встречаются везде, где есть «;» происходит, до следующего ',' (вам может понадобиться пропустить перевод строки здесь). Если это домашнее задание, просто используйте scanf () или что-то еще, чтобы прочитать ключ.
  • распечатайте ключ и позицию байта, в которой вы его нашли, в свой индексный файл
  • AFAIUI, это алгоритм, я не вижу здесь проблемы?

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top