Visual FoxPro压缩索引文件格式

时间:2008-12-31 20:54:31

标签: indexing file-format visual-foxpro foxpro xbase

我试图理解Visual FoxPro紧凑索引(* .IDX)的文件格式。我目前正在提及Microsoft's documentation作为指导。

索引是512字节节点的B树。每个叶子(“外部”)节点包含多个条目。每个条目由四个数据组成:

  • 行号[FIXED LENGTH]
  • 重复的字节数(文档不解释这个)[FIXED LENGTH]
  • 尾随字节数(文档不解释这个)[FIXED LENGTH]
  • 键[VARIABLE LENGTH]

条目(没有它们的键)存储在节点的开头,紧跟在节点的24字节标题之后。它们的键不包含在此位置,因为键的长度不同,而行号,重复字节数和尾随字节数的长度是固定的。密钥存储在节点的末尾并向后工作。例如:

  • 24字节标题
  • 行号,重复字节数,尾随字节数(条目#1)
  • 行号,重复字节数,尾随字节数(条目#2)
  • 行号,重复字节数,尾随字节数(条目#3)
  • ...
  • key(条目#3)
  • key(条目#2)
  • key(条目#1)

如何确定按键的各个长度?该文档似乎没有指定这一点。它们是完全连续的(没有空字节分隔符)。

我可以通过目视检查手动隔离钥匙。我怀疑尾随字节数表示密钥的长度。但是,它与此检查确定的长度无关。

我相信FoxPro文件格式源自xBase标准。也许这敲响了钟声?

4 个答案:

答案 0 :(得分:4)

在发现XBase :: Index Perl模块之后,我确定外部节点中的键实际上与内部节点中的固定长度键的长度相同,除了删除任何尾随空格。这就是文档中提到的“尾随字节数”指的是(在键的末尾截断了多少尾随空格)。我还没有确定“重复字节数”是什么,但该模块至少澄清了它的关系:

variable_key_length = fixed_key_length - duplicate_byte_count - trailing_byte_count

例如,假设此索引的固定密钥长度为10个字节。现在假设密钥“DOG”存储在外部节点中。它的重复字节数(根据我观察到的)很可能是零,而其尾随字节数将是7(截断的空格数)。因此,只存储表示“DOG”的三个字节。

答案 1 :(得分:1)

关于重复字节数:这意味着第一个字节的数量,在当前密钥和先前密钥中是相同的。存储在节点末尾的第一个密钥条目具有全长,除了尾随空白;连续键输入只有与先前键输入不同的符号。

答案 2 :(得分:1)

在使用索引(索引讨论文本)时,Xbase索引很少超过10个字符或15个(很少见)。

在任何情况下,如果您知道按键数量按比例分割二进制部分的数量。 当您创建一个存储数据的算法,或使用:开始或结束标记或选项卡存储数据时,或者您是否保留静态大小,因此不要使用左侧空白。静态格式效率较低,但读取速度更快,显然可以生成更可预测的结构。

答案 3 :(得分:0)

Microsoft says这是关于IDX文件结构的(在页面底部有指向Compact Index format之类的所有其他链接。)