• Domingo 15 de Diciembre de 2024, 22:44

Autor Tema:  Listas Relacionadas Con Ficheros En C  (Leído 2886 veces)

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Listas Relacionadas Con Ficheros En C
« en: Miércoles 1 de Junio de 2005, 14:40 »
0
Hola a todos, que tal, vereis tengo un problemilla, tengo hecha una practica de listas, que tiene q hacer una serie de cosas,insertar al principio, insertar al final, insertar por apellido1, borrar por apellido1, visualizar por apellido1, etc. La cuestion es que me piden que cree la lista, a partir de los datos incluidos en un fuichero texto, es decir, que la funcion crear Lista, debe incluir la lectura e inserción de todos los registros que existe en el fichero.
Pues bien yo tengo la practica entera, pero no he conseguido que escriba en el fichero, solo que lo lea del fichero, asi que les pongo el codigo que tengo de la funcion cogerDatosTexto, y si alguien sabe como enfocar la funcion crear Lista, por favor que m eche una mano.

Código: Text
  1.  
  2. #include "listas.h"
  3.  
  4. void cogerDatosTexto(struct lista **cabeza)
  5. {
  6.  
  7.     FILE *p; //declaro un puntero al fichero
  8.     struct lista *actual;
  9.     struct lista *aux;
  10.   char nombre[15];
  11.   char ape1[20];
  12.   char ape2[20];
  13.   int edad = 0;
  14.  
  15.  if((p=fopen("listas.txt","r")) == NULL) // abro para lectura
  16.  {
  17.    printf("\n Error al abrir el archivo\n");
  18.    exit (1);
  19.  }
  20.  
  21.   *cabeza=NULL;
  22.  
  23.     while(fscanf(p,"%s %s %s %d",nombre,ape1,ape2,&edad)== 4)
  24.     {
  25.     //reservamos espacio para el nuevo elemento
  26.     actual = nuevoElemento();
  27.        
  28.      strcpy(actual->nombre,nombre);
  29.     strcpy(actual->ape1,ape1);
  30.     strcpy(actual->ape2,ape2);
  31.     actual->edad=edad;
  32.     actual->sig = NULL;
  33.     if(*cabeza ==NULL)
  34.       *cabeza = actual;
  35.     else
  36.       aux->sig = actual;
  37.     aux = actual;
  38.   }
  39.    fclose(p);
  40.  
  41. }
  42.  
  43.  
  44.  


Aqui les pongo el fichero de cabecera

Código: Text
  1.  
  2. /*Declaracion de estructuras y funciones*/
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <conio.h>
  7. #include <string.h>
  8. #include <malloc.h>
  9. #define SI 1
  10. #define NO 0
  11.  
  12. struct lista
  13. {
  14.     char nombre[15];
  15.     char ape1[20];
  16.     char ape2[20];
  17.     int edad;
  18.     struct lista *sig;
  19. };
  20. struct lista *nuevo;
  21. void cogerDatosTexto(struct lista **cabeza);
  22.  
  23. void introducirDatos(struct lista *dat);
  24.  
  25. struct lista* nuevoElemento();
  26. int presentaMenu(void);
  27. void crearLista(struct lista **cabeza);
  28. int listaVacia(struct lista *cabeza);
  29. void insertarPrincipio(struct lista **cabeza);
  30. void visualizarNodo(struct lista *cabeza);
  31.  
  32. void mostrarLista(struct lista *cabeza);
  33. void insertarFinal(struct lista **cabeza);
  34. void insertarPorApellido1(struct lista **cabeza,char *ape1);
  35.  
  36. void visualizarPorApellido1(struct lista *cabeza,char *ape1);
  37. struct lista* buscarPersona(struct lista *cabeza, char *ape1);
  38. void visualizarCabezaCola(struct lista *cabeza);
  39. void visualizarColaCabeza(struct lista *cabeza);
  40. void liberarMemoria(struct lista **cabeza);
  41. void liberarMemoriaRecursivo(struct lista **cabeza);
  42. void grabarLista(struct lista *cabeza, char *fichero);
  43. void borrarPorApellido1(struct lista **cabeza, char *ape1);
  44.  
  45. void liberarRecursivo(struct lista **cabeza);
  46. void liberar(struct lista **cabeza);
  47. int listaOrdenadaApellido(struct lista *cabeza);
  48.  
  49.  


No crean qe quiero q me hagan la practica, ya les digo solo necesito que al insertar datos, se insetten tamien en el fichero, poruqe yo tengo hecho todo el resto de la practica.
Muchas gracias

pitukilloloco

  • Miembro MUY activo
  • ***
  • Mensajes: 104
    • Ver Perfil
Re: Listas Relacionadas Con Ficheros En C
« Respuesta #1 en: Miércoles 1 de Junio de 2005, 17:13 »
0
No acabo de entenderte bien. Vas a leer toda esa información desde un archivo de texto ¿verdad? Ahora, al leerlos ¿vas a crear dinámicamente en memoria cada elemento que contenga información de la estructura y los vas a enlazar para crear la lista? ¿en qué momento vas a insertar al principio o al final o visualizar la lista por apellido? ¿para que necesitas que escriba en el fichero si todo lo manejas en memoria?

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Listas Relacionadas Con Ficheros En C
« Respuesta #2 en: Miércoles 1 de Junio de 2005, 17:28 »
0
Cita de: "pitukilloloco"
No acabo de entenderte bien. Vas a leer toda esa información desde un archivo de texto ¿verdad? Ahora, al leerlos ¿vas a crear dinámicamente en memoria cada elemento que contenga información de la estructura y los vas a enlazar para crear la lista? ¿en qué momento vas a insertar al principio o al final o visualizar la lista por apellido? ¿para que necesitas que escriba en el fichero si todo lo manejas en memoria?
Yo lo que necesito es crear la lista, y al crearla incluir la lectura e insercion de todos los registros existentes en el fichero.
Por ejemplo si tengo

El fichero listas.txt es este

maria jimenez moral 24
jesus leon muñoz 30

Pues q a la hora de insertar al principio, si meto otro elemento mas por ejemplo
luis delgado moreno 50

que lo inserte al principio de la lista, considerando el fichero listas.txt

luis delgado moreno 50
maria jimenez moral 24
jesus leon muñoz 30

se quedaria asi la lista.
Espero que me hayas entendido.
Gracias pòr responderme

pitukilloloco

  • Miembro MUY activo
  • ***
  • Mensajes: 104
    • Ver Perfil
Re: Listas Relacionadas Con Ficheros En C
« Respuesta #3 en: Miércoles 1 de Junio de 2005, 19:11 »
0
Bueno, eso sí lo entiendo, pero yo te preguntaba cómo tenías pensado hacerla ¿usando memoria dinámica para crear los elementos en memoria? si va a ser dinámica en memoria ¿por qué preguntabas que no sabias como escribir en un archivo?

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Listas Relacionadas Con Ficheros En C
« Respuesta #4 en: Lunes 6 de Junio de 2005, 21:31 »
0
Cita de: "pitukilloloco"
Bueno, eso sí lo entiendo, pero yo te preguntaba cómo tenías pensado hacerla ¿usando memoria dinámica para crear los elementos en memoria? si va a ser dinámica en memoria ¿por qué preguntabas que no sabias como escribir en un archivo?
Si sabes lo que pido, por favor, ayudame, si que es memoria dinamica, pero necesito que el archivo se actualice cada vez que inserto, o elimino de la lista, eso es lo que no se hacer

pitukilloloco

  • Miembro MUY activo
  • ***
  • Mensajes: 104
    • Ver Perfil
Re: Listas Relacionadas Con Ficheros En C
« Respuesta #5 en: Martes 7 de Junio de 2005, 17:25 »
0
Si tu problema consiste en cómo escribir registros a un archivo, aquí te paso una liga, en este mismo foro, de un sencillo programa en C que efectúa altas, bajas y modificaciones en un archivo.
http://foros.solocodigo.com/index.php?showtopic=15531
 Si quieres insertar un registro en alguna posición del archivo, entonces necesariamente tienes que crear otro archivo; pasarle todos los registros a ese archivo hasta la posición donde quieres insertar el nuevo registro; insertarle el registro; copiar los registros restantes; borrar el archivo antiguo y renombrar el nuevo. Como ves, esto es muy ineficiente cada vez que insertes un registro. Una manera de hacerlo más eficiente es crear un archivo de índices que maneje el de los registros y cuando modificas dando de alta, insertando o dando de baja algun registro manterer ordenado el archivo de índices. ¿esto responde a tus dudas?

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Listas Relacionadas Con Ficheros En C
« Respuesta #6 en: Miércoles 8 de Junio de 2005, 19:43 »
0
Cita de: "pitukilloloco"
Si tu problema consiste en cómo escribir registros a un archivo, aquí te paso una liga, en este mismo foro, de un sencillo programa en C que efectúa altas, bajas y modificaciones en un archivo.
http://foros.solocodigo.com/index.php?showtopic=15531
 Si quieres insertar un registro en alguna posición del archivo, entonces necesariamente tienes que crear otro archivo; pasarle todos los registros a ese archivo hasta la posición donde quieres insertar el nuevo registro; insertarle el registro; copiar los registros restantes; borrar el archivo antiguo y renombrar el nuevo. Como ves, esto es muy ineficiente cada vez que insertes un registro. Una manera de hacerlo más eficiente es crear un archivo de índices que maneje el de los registros y cuando modificas dando de alta, insertando o dando de baja algun registro manterer ordenado el archivo de índices. ¿esto responde a tus dudas?
Gracias me has sido de gran ayuda, si no te importa me voy a aatrever a pedirte otro favor, es sobre matrices tridimensionales, tengo que hacer una practica, y es un poco compleja, sobre todo pq no entiendo muy bien lo de las matrices tridimensionales, si estas interesado en ayudarme, respondeme esto,
gracias por toedo