Visual FoxProコンパクトインデックス(* .IDX)のファイル形式を理解しようとしています。現在、ガイダンスとしてMicrosoftのドキュメントを参照しています。
インデックスは512バイトノードのBツリーです。各リーフ(「外部」)ノードには、複数のエントリが含まれています。各エントリは、次の4つのデータで構成されています。
- 行番号[固定長]
- 重複するバイト数(ドキュメントではこれを説明していません)[固定長]
- 末尾のバイト数(ドキュメントではこれを説明していません)[固定長]
- キー[可変長]
エントリ(キーなし)は、ノードの先頭、ノードの24バイトヘッダーの直後に格納されます。キーの長さが異なるため、これらのキーはこの場所に含まれていませんが、行番号、重複バイト数、および後続バイト数は長さが固定されています。キーはノードの最後に保存され、逆方向に機能します。例えば:
- 24バイトのヘッダー
- 行番号、重複バイト数、後続バイト数(エントリー#1)
- 行番号、重複バイト数、後続バイト数(エントリー#2)
- 行番号、重複バイト数、後続バイト数(エントリー#3)
- ..。
- キー(エントリ#3)
- キー(エントリ#2)
- キー(エントリ#1)
キーの個々の長さを決定するにはどうすればよいですか?ドキュメントにはこれを指定していないようです。それらは完全に隣接しています(ヌルバイト区切り文字はありません)。
目視検査で手動でキーを分離できます。末尾のバイト数がキーの長さを表しているのではないかと思いました。ただし、この検査で決定された長さとは相関していませんでした。
FoxProのファイル形式はxBase標準から派生していると思います。おそらくこれはベルを鳴らしますか?