C/Visual C - Archivos Planos Indexados en C para DOS

 
Vista:

Archivos Planos Indexados en C para DOS

Publicado por Jose Luis Solis (2 intervenciones) el 22/06/2001 02:55:26
Por favor necesito ayuda URGENTE, para poder hacer busquedas indexadas en archivos planos, si me envian codigos fuente con ejemplos estare muy agradecido.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Búsquedas indexadas en archivos planos en C para DOS

Publicado por Alejandro (925 intervenciones) el 26/09/2024 22:52:21
¡Claro, José! Aquí tienes un ejemplo de cómo realizar búsquedas indexadas en archivos planos utilizando C para DOS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
// Estructura para el índice
struct Indice {
    char clave[20];
    long posicion;
};
 
// Función para crear el índice
void crearIndice(FILE *archivo, FILE *indice) {
    struct Indice registro;
    long posicion = 0;
 
    while (fread(&registro, sizeof(struct Indice), 1, archivo) == 1) {
        fseek(indice, 0, SEEK_END);
        strcpy(registro.clave, strlwr(registro.clave)); // Convertir la clave a minúsculas
        registro.posicion = posicion;
        fwrite(&registro, sizeof(struct Indice), 1, indice);
        posicion++;
    }
}
 
// Función para buscar un registro por clave
void buscarRegistro(FILE *archivo, FILE *indice, char *clave) {
    struct Indice registro;
    int encontrado = 0;
 
    fseek(indice, 0, SEEK_SET);
 
    while (fread(&registro, sizeof(struct Indice), 1, indice) == 1) {
        if (strcmp(strlwr(registro.clave), strlwr(clave)) == 0) { // Comparar claves en minúsculas
            fseek(archivo, registro.posicion * sizeof(struct Indice), SEEK_SET);
            fread(&registro, sizeof(struct Indice), 1, archivo);
            printf("Registro encontrado:\n");
            printf("Clave: %s\n", registro.clave);
            printf("Posición: %ld\n", registro.posicion);
            encontrado = 1;
            break;
        }
    }
 
    if (!encontrado) {
        printf("Registro no encontrado.\n");
    }
}
 
int main() {
    FILE *archivo, *indice;
    char clave[20];
 
    archivo = fopen("datos.dat", "rb");
    indice = fopen("indice.dat", "wb");
 
    if (archivo == NULL || indice == NULL) {
        printf("Error al abrir los archivos.\n");
        return 1;
    }
 
    crearIndice(archivo, indice);
 
    printf("Ingrese la clave a buscar: ");
    scanf("%s", clave);
 
    buscarRegistro(archivo, indice, clave);
 
    fclose(archivo);
    fclose(indice);
 
    return 0;
}

En este ejemplo, se utiliza una estructura llamada "Indice" para almacenar la clave y la posición de cada registro en el archivo plano. La función "crearIndice()" recorre el archivo de datos, crea el índice y lo guarda en un archivo separado. La función "buscarRegistro()" busca un registro por clave en el archivo de datos utilizando el índice.

Recuerda reemplazar "datos.dat" con el nombre de tu archivo de datos y "indice.dat" con el nombre que desees para el archivo de índice.

Espero que este ejemplo te sea útil. ¡Buena suerte con tu proyecto!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar