2009-06-22 112 views
2

我忙于编写一个类,该类创建一个文本文件ASCII/BINARY索引。 我的问题是我真的不知道如何开始。我已经有一些尝试,但没有一个对我来说真的很好。 我不需要通过MFT找到文件的地址。只需加载文件并通过在索引文件中搜索关键字并将文本文件导入其显示的地址来更快地找到内容。制作索引创建类

的索引文件,应建立如下:

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

我们有一个文本文件,下面的例子值:

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

我希望这说明我的问题有点更好。 谢谢!

+1

请澄清您的要求。你是否想要一个书索引中的索引?什么是索引方向,如(流内的ascii /位置的行号)? – 2009-06-22 17:43:34

+0

不过,我不能输入连同那无法真正涉及到一些东西十六进制值涉及到输出...你要打印键(字符?)。 – 2009-06-22 20:40:09

回答

1

在我看来,你所有的类需要做的是将一个指针或文件起始偏移量数组存储到文件中的关键位置。

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

我建议你通过你的类使用一些公共方法来访问文件。然后,您可以更轻松地将密钥位置与写入的数据绑定。

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

储存于可变长度数组和密钥值,则可以很容易地检索的数据块的起点。

如果你的关键点是由一些关键字符标志着那么你可以使用相同的类,但存储的微小变化,其中关键值存储。最简单的方法是遍历数据,直到找到关键字符,然后统计检查到的字符数。计数然后用于产生您的关键位置。

1

你的代码片段并不是一个想法,因为它是你希望在最后得到的功能。

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

我建议你看看这样的数据结构。

编辑:

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

一旦完成此操作,就会对键阵列进行排序。现在,您可以对键进行二进制搜索以找到给定键的适当值。

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

0

我还是真的不明白的问题(你的问题问的skillz工作),但据我可以告诉算法是:

  1. 扫描文件线性,第一价值高达第一个逗号(',')可能是一个关键。所有其他密钥出现在任何';'发生,直到下一个','(你可能需要在这里跳过换行符)。如果这是一项家庭作业,只需使用scanf()或其他东西来读取密钥。
  2. 打印出来的密钥和字节位置,你发现它在你的索引文件

AFAIUI是这样的算法,我实在不明白这里的问题?