Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Sobre ficheros binarios, buscar registro

Estas en el tema de Sobre ficheros binarios, buscar registro en el foro de C/C++ en Foros del Web. Hola, tengo que realizar un programa en c, que muestre un menú para buscar en un fichero llamado " alumnos.bin " estos campos: Código: a) ...
  #1 (permalink)  
Antiguo 19/05/2015, 10:10
 
Fecha de Ingreso: mayo-2015
Mensajes: 19
Antigüedad: 8 años, 11 meses
Puntos: 0
Sobre ficheros binarios, buscar registro

Hola, tengo que realizar un programa en c, que muestre un menú para buscar en un fichero llamado "alumnos.bin" estos campos:

Código:
a) Buscar por NIF
b) Buscar por número de matrícula
c) Buscar por parte del nombre
d) Buscar por nota
e) Salir
El fichero esta compuesto por:
struct reg_alumno{
char rnif[10]; /* NIF de alumno */

long rmatricula; /* Número de matrícula */

char rnombre[26]; /* Nombre de alumno */

float rnotas[5]; /* Notas parciales */
}


Funciones de abrir el fichero y demás las domino, pero hay un apartado que no se como realizar, que es el punto C:

Código:
La búsqueda por nombre será “por contenido del patrón a buscar en el campo”, 
es decir, si se teclea como nombre a buscar RAMO, se listarán registros que puedan contener por ejemplo 
ANTONIO RAMOS, RAMON GARCIA, RAMONA ALONSO ó CARLOS ARAMOS.
Alguien puede darme una idea de como realizar este punto?

Última edición por albondi; 19/05/2015 a las 10:22
  #2 (permalink)  
Antiguo 20/05/2015, 00:49
Avatar de xKuZz  
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 2 meses
Puntos: 27
Respuesta: Sobre ficheros binarios, buscar registro

Pon un puntero que empiece al inicio de la cadena en la que vas a buscar y ve comparando mientras los caracteres vayan saliendo iguales y no se haya superado la longitud de la cadena de búsqueda. Si no se encontrará mueve el puntero al siguiente carácter y así sucesivamente hasta llegar al carácter de la cadena en la buscas que corresponda a el final de la cadena - longitud de cadena a buscar. Si el bucle lo encuentra asegúrate de que te devuelva el valor (o puntero) que necesitas.
  #3 (permalink)  
Antiguo 20/05/2015, 17:16
 
Fecha de Ingreso: mayo-2015
Mensajes: 19
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Sobre ficheros binarios, buscar registro

No se como posicionar el puntero del stream del buffer en el nombre; si el nombre fuera el primer atributo del registro del alumno seria fácil con FSEEK pero al ser el tercer campo no se como llevarlo ahí para empezar a comparar con la cadena que el usuario solicita buscar :(
Se me ocurre en FSEEK :

fseek(puntero, sizeof(reg_alumno.rnif)+sizeof(reg_alumno.rmatricu la), SEEK_SET);


Es decir, muevo el puntero los bytes que ocupan el primer y el segundo campo ( el NIF y el numero de matricula del alumno) y ahí ya estoy apuntando al primer carácter del nombre?
Gracias de antemano.
  #4 (permalink)  
Antiguo 21/05/2015, 00:24
Avatar de xKuZz  
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 2 meses
Puntos: 27
Respuesta: Sobre ficheros binarios, buscar registro

No, creía que ibas a leer todo el archivo y almacenarlo en memoria por eso te he dicho lo de los punteros. Cada linea ve almacenando los datos y luego sobrescribiéndolos si no son útiles. Cuando lleges a la parte del nombre puedes utilizar la función strstr de <string.h> y pones como primer argumento de la función el nombre del archivo y como segundo la cadena a buscar. Si no lo encuentra la función devuelve un puntero nulo, si lo encuentra te devuelve un puntero hacia dónde empieza la coincidencia.
  #5 (permalink)  
Antiguo 21/05/2015, 09:11
 
Fecha de Ingreso: mayo-2015
Mensajes: 19
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Sobre ficheros binarios, buscar registro

Cita:
Iniciado por xKuZz Ver Mensaje
No, creía que ibas a leer todo el archivo y almacenarlo en memoria por eso te he dicho lo de los punteros. Cada linea ve almacenando los datos y luego sobrescribiéndolos si no son útiles. Cuando lleges a la parte del nombre puedes utilizar la función strstr de <string.h> y pones como primer argumento de la función el nombre del archivo y como segundo la cadena a buscar. Si no lo encuentra la función devuelve un puntero nulo, si lo encuentra te devuelve un puntero hacia dónde empieza la coincidencia.
Muchas gracias, la función strstr no la conocía y me ha ayudado a resolver esto. Mil gracias!!!

Etiquetas: ficheros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:56.