• Domingo 15 de Diciembre de 2024, 10:59

Autor Tema:  Re: Con listas enlazadas y ficheros  (Leído 1108 veces)

QuieroC

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Con listas enlazadas y ficheros
« en: Miércoles 21 de Mayo de 2003, 23:37 »
0
La cuestion es la siguiente, si yo tengo una lista enlazada con varios campos y su respectivo lazo al siguiente registro de la estructura, como puedo meter los datos de cada registro en un fichero.

Agradeceria que, si ademas de explicarmelo, me facilitarais algun ejemplo practico.

Lo tengo que hacer campo a campo, o tengo que hacer un fwrite(); con la variable de la estructura?

Gracias por atenderme y espero que este foro siga adelante porque es de gran ayuda para mucha gente.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Con listas enlazadas y ficheros
« Respuesta #1 en: Jueves 22 de Mayo de 2003, 14:42 »
0
Esto te puede ayudar, pueds ver que no es tan complicado y con este ejemplo ya puedes hacer tu programa, este ejemplo lo que hace es leer un fichero y llevarlo a una estructura, nota que esta diseñado para leer el fichero en grupos de 4 digitos, esto es aleaotio ya que depende de como vayas a hacer tu estructura.
Para efectos de escibir una estructura en un archivo, lo debes hacer parte por parte, poque la estructura como tal es un puntero, asi que si lo guardas en disco, guardaras un numero que no te va a servir para recuperar la informacion.
Debes copiar cada uno de los campos de la estructura al disco, cada uno por aparte, asi mismo los debes recuperar uno por uno y luego depositarlos en la estructura.
 
Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <io.h>
  4. #define NOEXF 23
  5. #define NOLEN 24
  6. #define BUFFI 4
  7.  
  8. struct Data
  9. {
  10.   struct Data *Pre,*Post;
  11.   int info;
  12. };
  13.  
  14. /*captura datos para un arreglo, desde un archivo
  15.   de texto, los convierte en enteros y seguidamente
  16.   llena una estructura dinamica.
  17.   El archivo debe poseer elformato:
  18.   xxxx,xxxx,xxxx,xxxx,   para que la funcion lo pueda entener*/
  19. int Lectura(char *FileName,struct Data *Info)
  20. {
  21.   FILE *fp=NULL;
  22.   char buff[BUFFI];
  23.   int fd,multip=0,buffy;
  24.   struct Data *aux;
  25.  
  26.   if((fp=fopen(FileName,"r"))!=NULL)
  27.   {
  28.     fd=fileno(fp);
  29.     multip=filelength(fd);
  30.     if(multip%(BUFFI+1)==0)
  31.     {
  32.       Info->Pre=NULL;
  33.       Info->info=0;
  34.       Info->Post=NULL;
  35.  
  36.       while(multip>0)
  37.       {
  38.         fread(buff,sizeof(buff),1,fp);
  39.         Info->info=strtol(buff,NULL,10);
  40.         aux=(struct Data *)malloc(sizeof(struct Data));
  41.         Info->Post=aux;
  42.         aux->Pre=Info;
  43.         aux->Post=NULL;
  44.         Info=aux;
  45.         fseek(fp,1,SEEK_CUR);
  46.         multip-=(BUFFI+1);
  47.       }
  48.       free(aux);
  49.       free(Info);
  50.       fflush(fp);
  51.       fclose(fp);
  52.       close(fd);
  53.     }
  54.     else
  55.     {
  56.       return NOLEN;//Archivo de tama¤o inapropiado no es multiplo de BUFFY+1
  57.     }
  58.   }
  59.   else
  60.   {
  61.     return NOEXF;//Archivo no existe
  62.   }
  63. }
  64.  
  65.  

Ojala te sirva

juank
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io