Struktur von Indexdateien (.IDX)
Indexdateien enthalten einen Vorspanndatensatz und einen oder viele Knotendatensätze. Der Vorspanndatensatz enthält Informationen über den Stammknoten, die aktuelle Dateigröße, die Länge des Schlüssels, Indexoptionen und -erkennung sowie Informationen über eine druckbare ASCII-Darstellung des Schlüssels1 und FOR-Ausdrücke. Der Vorspanndatensatz beginnt an Dateiposition 0.
Knotendatensätze enthalten ein Attribut, die Anzahl der vorhandenen Schlüssel und Zeiger auf Knoten links und rechts vom aktuellen Knoten (auf derselben Ebene). Außerdem enthalten sie eine Reihe von Zeichen, die den Schlüsselwert und einen Zeiger auf einen Knoten auf einer niedrigeren Ebene oder auf eine Datensatznummer der Tabelle umfassen. Die Größe jedes Datensatzes, der in eine Datei ausgegeben wird, beträgt 512 Bytes.
Indexvorspanndatensatz
Versatz in Bytes | Beschreibung |
---|---|
00 – 03 | Zeiger auf den Stammknoten |
04 – 07 | Zeiger auf die Liste der freien Knoten ( -1, wenn nicht vorhanden) |
08 – 11 | Zeiger auf das Dateiende (Dateigröße) |
12 – 13 | Länge des Schlüssels |
14 | Indexoptionen (einer der folgenden numerischen Werte oder deren Summe): 1 - ein eindeutiger Index 8 - Index weist Klausel FOR auf |
15 | Indexerkennung (für zukünftige Verwendung) |
16 – 235 | Indexausdruck (nicht kompiliert; bis zu 220 Zeichen)1,3 |
236 – 455 | FOR-Ausdruck (nicht kompiliert; bis zu 220 Zeichen, die mit einem nullwertigen Byte enden) |
456 – 511 | Nicht benutzt |
Indexknotendatensatz
Versatz in Bytes | Beschreibung |
---|---|
00 – 01 | Knotenattribute (einer der folgenden numerischen Werte oder deren Summe): 0 - Indexknoten 1 - Stammknoten 2 - Blattknoten |
02 – 03 | Anzahl der vorhandenen Schlüssel (0, 1 oder viele) |
04 – 07 | Zeiger auf den Knoten unmittelbar links neben dem aktuellen Knoten (auf derselben Ebene; -1, wenn nicht vorhanden) |
08 – 11 | Zeiger auf den Knoten unmittelbar rechts neben dem aktuellen Knoten (auf derselben Ebene; -1, wenn nicht vorhanden) |
12 – 511 | Bis zu 500 Zeichen, die alle Schlüsselwerte des Schlüssels und für jeden Schlüsselwert eine Hexadezimalzahl mit vier Bytes enthalten (gespeichert im normalen Format von links nach rechts): Handelt es sich um einen Blattknoten (Attribut = 02 oder 03), geben die vier Bytes eine aktuelle Tabellennummer im Hexadezimalformat an, andernfalls einen Zeiger innerhalb des Indexes.2 Die Kombinationen aus Schlüssel und 4-Byte-Hexadezimalzahl treten so oft auf, wie in Bytes 02 - 03 angegeben. |
1 Der Schlüsseltyp ist nicht im Index gespeichert. Er muss über den Indexausdruck festgelegt werden.
2 Außer bei Zeichenfolgen, als Schlüsselwerten verwendeten Zahlen und der 4-Byte-Zahl des Blattknotens werden für die Darstellung die Bytes umgekehrt (Intel 8086-Format).
3 Als Schlüssel verwendete Zahlen stellen einen Sonderfall dar. Sie werden mit Hilfe des folgenden Algorithmus konvertiert, damit sie unter Verwendung derselben ASCII-Sortierreihenfolge wie Zeichen sortiert werden können:
- Konvertieren Sie die Zahl in das IEEE-Gleitkommaformat. Weitere Informationen finden Sie unter Kapazität von Visual FoxPro-Systemkomponenten.
- Ändern Sie die Reihenfolge der Bytes (Intel 8086-Format), so dass sie von links nach rechts angeordnet sind.
- Bei einer negativen Zahl verwenden Sie das logische Komplement der Zahl, tauschen Sie also alle 64 Bits aus (1 gegen 0 und 0 gegen 1). Andernfalls invertieren Sie nur das ganz links stehende Bit.
Beispiel für eine sortierte Baumstruktur
Um in der unten abgebildeten Struktur einen Schlüssel zu finden, muss ein einziger Pfad zwischen dem Stamm- und den Blattknoten durchsucht werden. Die Knoten der niedrigsten Ebene sind Blattknoten. Da die Schlüssel sortiert sind, sind alle Schlüssel im untergeordneten Baum kleiner gleich dem übergeordneten Knoten.
In der Abbildung oben werden die Buchstaben als Schlüsselwerte verwendet. Zu jedem Schlüsselwert gibt es auch eine 4-Byte-Hexadezimalzahl. Die den Schlüsselwerten im Blattknoten zugeordneten Zahlen sind Datensatznummern der Tabelle. Den Schlüsselwerten in anderen Knoten sind Zeiger innerhalb des Indexes zugeordnet.
Bytes 12-511 im Indexknoten-Datensatz können folgendermaßen angezeigt werden:
Die Kombination aus Schlüsselwert und Hexadezimalzahl tritt in den Bytes 12 - 511 n-mal auf, wobei n die Anzahl der vorhandenen Schlüssel ist.
Siehe auch
Struktur von komprimierten Indexdateien (IDX) | Struktur von Mehrfachindexdateien (CDX) | Struktur von Tabellendateien (DBC, DBF, FRX, LBX, MNX, PJX, SCX, VCX) | Tabellenstruktur von Tabellendateien (DBC, FRX, LBX, MNX, PJX, SCX, VCX) | Struktur von Memodateien (FPT) | Makrodateiformat (FKY) | Dateinamenerweiterungen und Dateitypen