Pregunta

Estoy ocupado programando una clase que crea un índice a partir de un archivo de texto ASCII / BINARY. Mi problema es que realmente no sé cómo empezar. Ya tuve algunos intentos, pero ninguno realmente funcionó bien para mí. NO necesito encontrar la dirección del archivo a través de la MFT. Simplemente cargando el archivo y encontrando cosas mucho más rápido buscando la clave en el archivo de índice y yendo en el archivo de texto a la dirección que muestra.

El archivo de índice debe construirse de la siguiente manera:

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

Tenemos un archivo de texto con el siguiente valor de ejemplo:

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

Espero que esto explique mi pregunta un poco mejor. Gracias!

¿Fue útil?

Solución

Me parece que todo lo que su clase necesita hacer es almacenar una matriz de punteros o compensaciones de inicio de archivo en las ubicaciones clave del archivo.

Realmente depende de lo que representen sus ubicaciones clave.

Sugeriría que acceda al archivo a través de su clase utilizando algunos métodos públicos. Luego, puede vincular más fácilmente las ubicaciones clave con los datos escritos.

Por ejemplo, sus ubicaciones clave pueden ser donde comienza cada nuevo bloque de datos escrito en el archivo. p.ej. primer bloque 1000 bytes, ubicación clave 0; segundo bloque 2500 bytes, ubicación clave 1000; tercer bloque de 550 bytes; ubicación clave 3500; el siguiente bloque será 4050, suponiendo que 0 es el primer byte.

Almacene los valores clave en una matriz de longitud variable y luego podrá recuperar fácilmente el punto de partida para un bloque de datos.

Si su punto clave está representado por algún carácter clave, puede usar la misma clase, pero con un ligero cambio para almacenar dónde se almacena el valor clave. La forma más simple es recorrer los datos hasta que se encuentre el carácter clave, contando la cantidad de caracteres verificados a medida que avanza. El recuento se utiliza para generar su ubicación clave.

Otros consejos

Su fragmento de código no es tanto una idea como la funcionalidad que desea tener al final.

Reconozca que " indexación " simplemente significa "recordar" donde se encuentran las cosas. Puede lograr esto usando cualquier estructura de datos que desee ... B-Tree, árbol Rojo / Negro, BST o estructuras más avanzadas como árboles de sufijos / matrices de sufijos.

Le recomiendo que examine estas estructuras de datos.

editar:

con la nueva información, sugeriría hacer su propia búsqueda de clave / valor. Cree una matriz de claves y asocie sus valores de alguna manera. Esto puede significar construir una clase o estructura que contenga tanto la clave como el valor, o en su lugar contenga la clave y un puntero a una estructura o clase con un valor, etc.

Una vez que haya hecho esto, ordene la matriz de claves. Ahora, tiene la capacidad de hacer una búsqueda binaria en las claves para encontrar el valor apropiado para una clave determinada.

Puede construir una tabla hash de manera similar. podría construir un BST o una estructura similar como mencioné anteriormente.

Todavía no entiendo realmente la pregunta (trabaja en tu pregunta preguntando skillz), pero por lo que puedo decir, el algoritmo será:

  1. escanea el archivo linealmente, el primer valor hasta la primera coma (',') es una clave, probablemente. Todas las demás claves se producen donde sea un ';' ocurre, hasta el siguiente ',' (es posible que deba omitir los saltos de línea aquí). Si se trata de una tarea, simplemente use scanf () o algo para leer la clave.
  2. imprima la clave y la posición de byte en la que la encontró en su archivo de índice

AFAIUI ese es el algoritmo, ¿realmente no veo el problema aquí?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top