![]() |
Problema con busqueda en ficheros binarios en C Hola buenas a todos estoy realizando un proyecto que gestiona el personal y las ventas de una empresa, y tengo un problema con la busqueda dentro de un fichero binario, os pongo la funcion en cuestion ya que el codigo entero es muy largo aunque si alguien lo pide lo posteare. Tengo al personal en un fichero y las ventas en otro, la cuestion es que si borro un empleado debo borrar tambien todas las ventas que a realizado y no me funciona esa parte. Si alguien me pudiera ayudar estaria muy agradecido Estas son las estructuras, he intentado realiazar la tarea de borrar las ventas que ha realizado una persona, ambas coinciden por el campo NIF. Para ello he recorido el fichero de ventas moviendo la posicion bloque a bloque con el tamaño de la estructura, comparando el NIF del la estructura ventas con NIF de la persona ha borrar. Y no me funciona. Que esta mal en el codigo? Código: struct personaCódigo: void bajaspersonal() |
Re: Problema con busqueda en ficheros binarios en C Hace mucho tiempo puse un ejemplo simple en este foro http://foros.solocodigo.com/index.ph...531&hl=archivo de cómo dar de alta, de baja y modificar registros en un archivo usando las funciones de la librería estandar de C stdio. En el ejemplo realmente no doy de baja los registros, sino sólo les pongo una marca que me indican que ya no están disponibles. Me parece que haces lo mismo según pude ver en lo que pusiste, aunque no estoy seguro. ¿Es esto lo que estás haciendo en tu programa? ¿sólo los marcas para indicar que están borrados? ¿cuál es el problema con estas funciones que pusiste? ¿no escriben esa marca? Vi que buscas secuencialmente el archivo que quieres borrar en un ciclo for y te mueves en el archivo con estas instrucciones: Código: fseek(canal2,i*sizeof(struct venta),SEEK_SET);Código: fseek (globfp, -1L * sizeof (a), SEEK_CUR); |
Re: Problema con busqueda en ficheros binarios en C Mire el uso de fseek tienes razón sobra en el codigo, fread hace lo mismo. Yo tambien pongo una marca cuando borro un venta o una persono. p.contro_alta o v.control_alta según sea. Otra cosa no entiendo es cuando le pasas el segundo argumento por que multiplicas el tamaño de la estructura por -1L. El codigo sigue sin funcionar. Que estoy haciendo mal? |
Re: Problema con busqueda en ficheros binarios en C La función fseek mueve el apuntador al archivo de acuerdo al número de bytes que le des. Hay tres maneras de hacerlo, 2 absolutas y una relativa. Las dos absolutas son, ya sea a partir del comienzo del archivo (SEEK_SET) o del final (SEEK_END), y la relativa es de acuerdo a donde esté apuntando en ese momento el apuntador interno del archivo (SEEK_CUR). Esta constante se la das en el tercer parámetro de la función. El número de bytes para que se mueva el apuntador se lo das en el segundo argumento de la función como un valor long int, pero este puede ser negativo o positivo. Si le das un valor positivo el apuntador se moverá hacia adelante, y hacia atrás si le das un valor negativo. En el ejemplo le doy un valor negativo para que se mueva hacia atrás tantos bytes como ocupa el registro del ejemplo, con esto el apuntador vuelve a apuntar al comienzo del registro que se quiere borrar. De tu problema, pues lo único que te puedo decir es que trates de aislarlo de manera que sólo quede el código donde tienes el error y lo restante lo pongas en comentarios para que lo depures más fácilmente. Si te fijas el ejemplo que te di si borra bien los registros, entonces de ahí te puedes guiar para que funcione el tuyo. |
| La zona horaria es GMT -6. Ahora son las 10:23. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.