2009-06-22 3 views
2

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

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

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

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

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

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

+1

Пожалуйста, уточните ваши требования. Вам нужен индекс, как в книжном индексе? Каковы индексированные направления типа (номер строки для ascii/position внутри потока)? –

+0

Тем не менее, я не могу связать вход с выходом ... вы печатаете клавиши (символы?) Вместе с некоторым шестнадцатеричным значением, которое действительно не может быть связано ни с чем. –

+0

OK ... прежде всего, мы создаем случайный файл с этим материалом в нем: 1, 8752 FW, ++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++, *********************** ************************************************** *, ------------------------------------------------ ------------------------------; Мы записываем его в текстовый файл, а затем создаем индекс, показывающий, где найти ключ в этом файле. Ключ: 1 – shevron

ответ

1

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

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

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

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

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

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

1

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

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

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

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

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

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

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

+0

(Работа над тем же назначением). Это не должно быть так сложно. Единственное, что нужно сохранить, это ключ + смещение записи в другом файле. – Ikke

+0

Я прав ... это немного сложно для нашего задания. ;) Но ведь это интересно! Возможно, я буду использовать его позже в некоторых программах. – shevron

0

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

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

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

Смежные вопросы