Создание класса создания индекса - PullRequest
2 голосов
/ 22 июня 2009

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

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 01 июля 2009

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

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

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

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

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

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

1 голос
/ 22 июня 2009

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

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

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

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

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

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

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

0 голосов
/ 24 июня 2009

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

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

AFAIUI, это алгоритм, я не вижу здесь проблемы?

...