Estructura de archivo de índice (.idx)

Los archivos de índice contienen un registro de encabezado y uno o varios registros de nodos. El registro de encabezado contiene información acerca del nodo raíz, el tamaño del archivo actual, la longitud de la clave, opciones de índice y de firma, y representaciones ASCII imprimibles de la clave de expresiones FOR. El registro de encabezado comienza en la posición cero del archivo.

Los registros de nodo restantes contienen un atributo, número de claves presentes y punteros que apuntan a nodos a la izquierda y a la derecha (en el mismo nivel) del nodo actual. También contienen un grupo de caracteres que rodean el valor clave y un puntero que apunta a un nodo de nivel más bajo, o bien un número de registro de tabla actual. El tamaño de cada registro que sale a un archivo es de 512 bytes.

Registro de encabezado de índice

Desplazamiento de bytes Descripción
00 – 03 Puntero dirigido al nodo raíz
04 – 07 Puntero dirigido a la lista de nodos libres ( – 1 si no está presente)
08 – 11 Puntero dirigido al final del archivo (tamaño de archivo)
12 – 13 Longitud de clave
14 Opciones de índice (cualquiera de los valores numéricos siguientes o sus sumas):
1 – un índice único
8 – el índice tiene una cláusula FOR
15 Firma de índice (para uso futuro)
16 – 235 Expresión clave (sin compilar; hasta 220 caracteres)1,3
236 – 455 Expresión FOR (sin compilar; hasta 220 caracteres, finalizando con un byte de valor nulo)
456 – 511 Sin utilizar

Registro de nodos de índice

Desplazamiento de bytes Descripción
00 – 01 Atributos de nodos (cualquiera de los valores numéricos siguientes o sus sumas):
0 – nodo índice
1 – nodo raíz
2 – nodo terminal
02 – 03 Número de claves presentes (0, 1 o muchas)
04 – 07 Puntero dirigido al nodo situado directamente a la izquierda del nodo actual (en el mismo nivel; -1 si no está presente)
08 – 11 Puntero dirigido al nodo situado directamente a la derecha del nodo actual (en el mismo nivel; -1 si no está presente)
12 – 511 Hasta 500 caracteres que contienen el valor clave para la longitud de la clave con un número hexadecimal de cuatro bytes (almacenado en formato de izquierda a derecha normal):
Si el nodo es una hoja (atributo = 02 o 03), los cuatro bytes contienen un número de tabla actual en formato hexadecimal; si no, los 4 bytes contienen un puntero entre índices.2

Las combinaciones de números hexadecimales clave/cuatro bytes se darán el número de veces indicado en los bytes 02-03.

1 El tipo de clave no se almacena en el índice. Debe ser determinado por la expresión clave.
2 Todos los tipos menos las cadenas de caracteres, los números usados como valores clave y los números de cuatro bytes del nodo secundario se representan en bytes invertidos (formato Intel 8086).
3 Los números son un caso especial cuando se usan como clave. Se convierten mediante el siguiente algoritmo de forma que se puedan ordenar usando la misma secuencia de ordenación ASCII que los caracteres:

  • Se convierte el número al formato de coma flotante IEEE. Para obtener más información, vea Capacidades del sistema de Visual FoxPro.
  • Se intercambia el orden de los bytes del orden Intel 8086 al orden izquierda a derecha.
  • Si el número era negativo, se toma el complemento lógico del número (se intercambian los 64 bits, 1 a 0 y 0 a 1); si no, sólo se invierte el bit más a la izquierda.

Ejemplo de estructura de árbol ordenada

Para encontrar una clave en la estructura siguiente hay que buscar un sólo camino entre el nodo primario y los nodos secundarios. Los nodos del nivel más bajo son nodos secundarios. Como las claves están ordenadas, todas las claves del subárbol son menores o iguales que el nodo primario.

En la ilustración anterior, las letras se usan como los valores clave. Cada clave también tendría un número hexadecimal de cuatro bytes. Los números asociados con las claves de los nodos secundarios serían los números de tabla actuales — todas las claves de los otros nodos tendrían asociados punteros entre índices.

Podríamos ver los bytes 12-511 en el registro de nodo índice de la siguiente forma:

La combinación de números valor/hexadecimal clave se da n veces en los bytes 12-511 en donde n es el número de claves presentes.

Vea también

Estructura de archivo de índice compacto (.idx) | Estructura de archivo de índice compuesto (.cdx) | Estructura de archivos de tabla (.dbc, .dbf, .frx, .lbx, .mnx, .pjx, .scx, .vcx) | Estructuras de tabla de archivos de tabla (.dbc, .frx, .lbx, .mnx, .pjx, .scx, .vcx) | Estructura de archivo memo (.FPT) | Formato de archivo de macro (.fky) | Extensiones de archivo y tipos de archivo