Título: Escritura y lectura de archivos binarios Publicado por: ++c en 3 Septiembre 2014, 19:04 pm Hola amigos, estoy tratando de hacer un código de archivo binario con array de estructuras pero no encuentro como hallar adecuadamente la lectura de los registros que introduzco con fread.
Si introduzco dos personas como en el ejemplo necesita de tres ocasiones para leerlas hasta llegar a final de archivo. No encuentro la manera sencilla de que haga las lecturas correctas de las personas que solicito a través de un número. Dejo el código para conocer en que puedo estar fallando, gracias!! Código
Título: Re: Escritura y lectura de archivos binarios Publicado por: eferion en 4 Septiembre 2014, 09:51 am Código
No me ha quedado muy clara esta parte del código. Intentas leer un registro determinado del archivo... pero el mecanismo es extraño. Me explico: 1. Abres el archivo 2. Preguntas al usuario el índice del registro a visualizar??? antes de haber leído el archivo ????? 3. Después, localizas ese registro, lo sacas por pantalla y entonces sobreescribes su contenido con el primer registro que te encuentras en el fichero. Al final lo que acabas de leer te lo guardas para ti y no lo sacas por pantalla. 4. Vuelves al paso 2 hasta que hayas leído todos los registros del archivo. El código de arriba lo puedes simplificar. Quizás te ayude a ver que no tiene mucho sentido : Código
El comportamiento es francamente extraño. Quizás deberías comentar qué se espera acerca del funcionamiento de este programa. Título: Re: Escritura y lectura de archivos binarios Publicado por: rir3760 en 4 Septiembre 2014, 17:26 pm estoy tratando de hacer un código de archivo binario con array de estructuras pero no encuentro como hallar adecuadamente la lectura de los registros que introduzco con fread. Como ya te comento eferion el programa tiene bastantes errores, si no tienes un curso o libro de calidad debes conseguir uno, recomendaciones sobre ellos las puedes revisar mediante el motor de búsqueda de los foros.Diría que el error principal es lógico (imprimir el registro y solo después de ello leerlo) pero debido a la cantidad de errores es mejor rescribir esa parte desde cero. Los pasos son: 1) Pides el numero de registros al usuario. 2) Llamas a fread tratando de leer el numero indicado (pueden ser menos). 3) Utilizas un bucle para imprimir cada registro leído. Mas o menos así: Código
Un saludo Título: Re: Escritura y lectura de archivos binarios Publicado por: ++c en 4 Septiembre 2014, 23:08 pm Hola!!
Gracias por los consejos eferion y rir3760. Me han ayudado vuestros consejos y metodología para trabajar con ficheros. No me he explicado muy bien y espero expresarme lo que pretendo hacer. Mirar lo que quiero que haga el programa en la lectura: 1. Lea el fichero. 2. Que pregunte al usuario por el nº de registro que desea visualizar. Ejemplo: Se han introducido y guardado previamente en la primera parte del código con fwrite: - Nombre= José , se habrá guardado en persona[0] - Nombre2= David , persona[1] 3. El programa mostrará los datos correspondientes a ese usuario. He intentado hacerlo de otra forma pero solo consigo que me lea ambos contactos(José y David) si introduzco el contacto '0', si coloco el que me busque el contacto '1' me muestra por pantalla en blanco las opciones que deseo se me visualicen. Código
Pdata: se que no se ve de muy buena forma el uso de !feof por algunos programadores... Pdata eferion: me sirvió como simplificaste el código. Pdata rir3760: me guardo tu código y me quedo con la copla de como leer y mostrar contactos. Saludos!! Título: Re: Escritura y lectura de archivos binarios Publicado por: rir3760 en 5 Septiembre 2014, 04:14 am Mirar lo que quiero que haga el programa en la lectura: Ya que en el programa declaras un array de N elementos solo tienes que utilizar la función fread para tratar de leer ese numero. Ya que se puede leer un numero menor almacenas el valor de retorno de la función en una variable (es el numero de elementos leídos). Eso ya lo explique en mi mensaje anterior:1. Lea el fichero. Código
2. Que pregunte al usuario por el nº de registro que desea visualizar. Solo tienes que utilizar la función scanf para obtener el indice del elemento en el array: 0 .. regs_leidos - 1.3. El programa mostrará los datos correspondientes a ese usuario. Imprimes el valor de los campos del elemento en cuestión, de nuevo eso ya lo tienes.Pdata: se que no se ve de muy buena forma el uso de !feof por algunos programadores. El problema con feof es que usualmente es innecesaria ya que se puede utilizar directamente el valor de retorno de la función utilizada.Por ejemplo en tu programa se debe duplicar la sentencia de lectura para que el bucle funcione correctamente (con feof) cuando utilizando el valor de retorno de fread te olvidas de feof y la duplicación: Código
Un saludo Título: Re: Escritura y lectura de archivos binarios Publicado por: ++c en 5 Septiembre 2014, 21:31 pm Hola rir3760,
gracias por las aclaraciones, sólo me queda una duda y es la que me indicas aquí: Citar Solo tienes que utilizar la función scanf para obtener el indice del elemento en el array: 0 .. regs_leidos - 1. La duda me viene en que no deduzco como recorrer ese array con regs_leidos... Saludos!! Título: Re: Escritura y lectura de archivos binarios Publicado por: rir3760 en 5 Septiembre 2014, 21:58 pm Tal vez no me estoy explicando correctamente ya que no hay necesidad alguna de "recorrer" el array, simplemente se imprime el registro indicado cuyo indice obtienes con la función scanf.
Solo para estar seguro. 1) Al utilizar fread en esta forma: Código Se le indica que lea el numero de registros indicado por "regs_a_leer", el objetivo de ello es leer todos los registros en el archivo y como máximo (el tercer argumento de la función) debes indicar la capacidad del array "persona". De nuevo se leen todos los registros. 2) La función puede leer menos bien porque se genere un error o porque simplemente no hay tantos registros en el archivo. Por eso la función retorna el numero de elementos leídos y almacenamos ese valor en la variable "regs_leidos": Código 3) Si todo sale bien el valor de "regs_leidos" sera igual a "regs_a_leer" (si no es así hay un error tal vez lógico, tal vez en la lectura del archivo). Solo resta obtener el indice del registro e imprimirlo: Código
Un saludo Título: Re: Escritura y lectura de archivos binarios Publicado por: ++c en 10 Septiembre 2014, 23:21 pm Hola rir3760,
gracias de nuevo por las explicaciones, me han servido para resolver los algoritmos de dos formas, te los agrego para que veas como han quedado: Código
Y este el otro sin uso de array de struct: Código
Seguro que encuentras algún pero... pero funcionan, jeje Saludos y gracias |