2

我正忙于编写一个从文本文件 ASCII/BINARY 中创建索引的类。我的问题是我真的不知道如何开始。我已经进行了一些尝试,但没有一个对我真正有效。我不需要通过 MFT 找到文件的地址。通过在索引文件中搜索键并在文本文件中进入它显示的地址,只需加载文件并更快地查找内容即可。

索引文件应按如下方式构建:

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

我们有一个带有以下示例值的文本文件:

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

我希望这能更好地解释我的问题。谢谢!

4

3 回答 3

1

您的代码片段与其说是一个想法,不如说是您最终希望拥有的功能。

认识到“索引”仅仅意味着“记住”事物所在的位置。您可以使用任何您希望的数据结构来完成此操作... B-Tree、红/黑树、BST 或更高级的结构,如后缀树/后缀数组。

我建议您研究此类数据结构。

编辑:

有了新信息,我建议您进行自己的键/值查找。构建一个键数组,并以某种方式关联它们的值。这可能意味着构建一个包含键和值的类或结构,或者包含键和指向具有值的结构或类的指针等。

完成此操作后,对键数组进行排序。现在,您可以对键进行二分搜索以找到给定键的适当值。

您可以以类似的方式构建哈希表。你可以像我之前提到的那样构建一个 BST 或类似的结构。

于 2009-06-22T17:26:19.560 回答
1

在我看来,您的班级所需要做的就是将一组指针或文件起始偏移量存储到文件中的关键位置。

这实际上取决于您的关键位置代表什么。

我建议您使用一些公共方法通过您的类访问该文件。然后,您可以更轻松地将关键位置与写入的数据联系起来。

例如,您的密钥位置可能是写入文件的每个新数据块的起始位置。例如第一个块 1000 字节,密钥位置 0;第二块 2500 字节,密钥位置 1000;第三块 550 字节;关键位置 3500;假设 0 是第一个字节,下一个块将是 4050。

将 Key 值存储在可变长度数组中,然后您可以轻松检索数据块的起点。

如果您的关键点由某个关键字符表示,那么您可以使用相同的类,但稍作更改以存储关键值的存储位置。最简单的方法是逐步检查数据,直到找到关键字符,同时计算检查的字符数。然后使用计数来生成您的关键位置。

于 2009-07-01T14:15:38.580 回答
0

我仍然不太明白这个问题(解决你的问题,询问 Skillz),但据我所知,算法将是:

  1. 线性扫描文件,第一个逗号(',')之前的第一个值可能是一个键。所有其他键出现在“;”的任何地方 发生,直到下一个','(您可能需要在此处跳过换行符)。如果是家庭作业,只需使用 scanf() 或其他东西来读取密钥。
  2. 将找到的键和字节位置打印到索引文件中

AFAIUI 那是算法,我真的没有看到这里的问题?

于 2009-06-24T07:52:52.453 回答