• Viernes 8 de Noviembre de 2024, 17:08

Autor Tema:  guardar en .txt  (Leído 1119 veces)

ituarte

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
guardar en .txt
« en: Jueves 4 de Junio de 2009, 20:37 »
0
Hola tengo que hacer un programa que tiene 4 opciones
1-. introducir datos
2.- ver los datos introducidos
3.- guardar los datos del punto 1 en .txt
4.- salir

tengo casi todo hecho, el problema es que los datos que se guardan en .txt deberia guardarlos de forma ordenada(en forma de tabla) y ami se me ponen de forma desordenada
mi codigo es el siguiente
Código: C++
  1.  
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #define TAM 30
  7.  
  8. void visualizar_variable ();
  9. int nueva_variable (struct variable nvariable [], int cantidad);
  10.  
  11. struct variable
  12. {
  13. char novela[TAM],ensayo[TAM],libro[TAM], nnovela[TAM],ntnovela[TAM];
  14. char nensayo[TAM],ntensayo[TAM],nlibro[TAM],ntlibro[TAM];
  15. };
  16.  
  17. main()
  18. {
  19.    char salir[5],aux;
  20.    struct variable nvariable [TAM];
  21.    int fin,opcion,cantidad=0,conta=0,contb=0;
  22.  
  23.    do{
  24.       printf("Elije una opcion:nn");
  25.       printf("1. Introducir datos (numero de titulos y numero de ejemplares por tema).n");
  26.       printf("2. Visualizar datos y numero total de libros disponibles en la libreria.n");
  27.       printf("3. Guardar los datos en un fichero de texto que se llamara libros.txtn");
  28.       printf("4. Salir.n");
  29.       printf("nSu opcion:n");
  30.       opcion=getche();
  31.       system("CLS");
  32.  
  33.       switch(opcion)
  34.       {
  35.          case'1':
  36.             conta++;
  37.             cantidad = nueva_variable (nvariable, cantidad);
  38.             break;
  39.          case'2':
  40.             if((conta!=0)&&(contb!=0))
  41.             {
  42.             visualizar_variable ();
  43.             }
  44.             else
  45.             {printf("No hay datos guardadosn");}
  46.             break;
  47.          case'3':
  48.          contb++;
  49.          printf("Datos Guardadosn");
  50.             FILE * fichero_ptr;
  51.             int i;
  52.             fichero_ptr = fopen("libros.txt","a+");
  53.             /* Colocamos el cursor al final del archivo para añadir un
  54.                nuevo registro */
  55.             fseek(fichero_ptr,0,SEEK_END);
  56.             for( i=0; i< cantidad; i++)
  57.                fwrite(&nvariable[i],sizeof(struct variable),1,fichero_ptr);
  58.             fclose(fichero_ptr);
  59.             break;
  60.          case'4':
  61.             return 0;
  62.             break;
  63.          default:
  64.             printf("Opcion incorrectan");
  65.       }
  66.       printf("nnDeseas continuar? ");
  67.       fflush(stdout);
  68.       scanf("%4s",salir);
  69.       if(strcmp(salir,"si")==0 || strcmp(salir,"SI")==0 || strcmp(salir,"Si")==0)
  70.       {
  71.          fin=1;
  72.          system("CLS");
  73.       }
  74.       else
  75.          fin=0;
  76.    }while(fin==1);
  77.    return 0;
  78. }
  79.  
  80. /*Esta funcion guarda las variables*/
  81. int nueva_variable(struct variable variable_ [], int cuantos)
  82. {
  83.    int donde = cuantos;
  84.    if (cuantos<TAM)
  85.    {
  86.       printf ("nIntroduce la palabra 'Novela': ");
  87.       /*Realizamos el “fflush (stdin)” para limpiar el buffer de entrada*/
  88.       fflush (stdin);
  89.       gets (variable_ [donde].novela);
  90.       printf ("Numero de titulos: ");
  91.       fflush (stdin);
  92.       scanf ("%s", & variable_ [donde].nnovela);
  93.       printf ("Numero total de ejemplares: ");
  94.       fflush (stdin);
  95.       scanf ("%s", & variable_ [donde].ntnovela);
  96.       printf ("nIntroduce la palabra 'Ensayo':");
  97.       fflush (stdin);
  98.       gets (variable_ [donde].ensayo);
  99.       printf ("Numero de titulos: ");
  100.       fflush (stdin);
  101.       scanf ("%s", & variable_ [donde].nensayo);
  102.       printf ("Numero total de ejemplares: ");
  103.       fflush (stdin);
  104.       scanf ("%s", & variable_ [donde].ntensayo);
  105.       printf ("nIntroduce la palabra 'Libro de texto':");
  106.       fflush (stdin);
  107.       gets (variable_ [donde].libro);
  108.       printf ("Numero de titulos: ");
  109.       fflush (stdin);
  110.       scanf ("%s", & variable_ [donde].nlibro);
  111.       printf ("Numero total de ejemplares: ");
  112.       fflush (stdin);
  113.       scanf ("%s", & variable_ [donde].ntlibro);
  114.       cuantos++;
  115.    }
  116.    else
  117.    {
  118.       printf ("No tengo más espacio");
  119.    }
  120.    return cuantos;
  121. }
  122.  
  123. /*Esta funcion visualiza todas las variable*/
  124. void visualizar_variable ()
  125. {
  126.    FILE*fichero_ptr;
  127.    char carac;
  128.    int contador;
  129.  
  130. /* Usamos una estructura auxiliar para recuperar registro por
  131.    registro del archivo */
  132.    struct aux
  133.    {
  134.    char novela[TAM],ensayo[TAM],libro[TAM], nnovela[TAM],ntnovela[TAM];
  135.    char nensayo[TAM],ntensayo[TAM],nlibro[TAM],ntlibro[TAM];
  136.    }auxiliar;
  137.  
  138.    if((fichero_ptr=fopen("libros.txt","a+t"))!=NULL)
  139.    {
  140.       fseek(fichero_ptr,0,SEEK_SET); //Colocamos el cursor al inicio del archivo
  141.       contador=1;
  142.  
  143.       while (fread(&auxiliar,sizeof(auxiliar),1,fichero_ptr))
  144.       {
  145.          printf("Registro: %dn-------------n",contador);
  146.          printf("%sn", auxiliar.novela);
  147.          printf("Numero de titulos: %sn", auxiliar.nnovela);
  148.          printf("Numero total de ejemplares: %sn", auxiliar.ntnovela);
  149.          printf("%sn", auxiliar.ensayo);
  150.          printf("Numero de titulos: %sn", auxiliar.nensayo);
  151.          printf("Numero total de ejemplares: %sn", auxiliar.ntensayo);
  152.          printf("%sn", auxiliar.libro);
  153.          printf("Numero de titulos: %sn", auxiliar.nlibro);
  154.          printf("Numero total de ejemplares: %snn", auxiliar.ntlibro);
  155.          contador++;
  156.       }
  157.       fclose(fichero_ptr);
  158.    }
  159.    else
  160.    {
  161.       printf("nNo hay datosn");
  162.    }
  163. }
  164.  
  165.  

Es la primera vez que utilizo estructuras y que tengo que guardar en .txt y estoy muy perdido, necesito que se me guarde en el archivo de la siguiente forma:

novela
Numero de titulos:
Numero total de ejemplares:
ensayo
"Numero de titulos
Numero total de ejemplares:
libros
Numero de titulos:
"Numero total de ejemplares:

muchas gracias

AnimaSubtilis

  • Miembro MUY activo
  • ***
  • Mensajes: 172
  • Nacionalidad: co
    • Ver Perfil
Re: guardar en .txt
« Respuesta #1 en: Jueves 4 de Junio de 2009, 23:03 »
0
Mira busca sobre fprintf.... con esta funcion podras trabajar de la misma manera que con el printf para impimir en pantalla

teniendo un control del diseño de tu archivo es lo mas facil...

eso si tendras que poner variable por variable de la estructura...

taluego............
A menudo unas pocas horas de «prueba y ensayo» podrán ahorrarte minutos de leer manuales.
[size=150]
Dios nos Otorgo el uno y el cero....y con eso creamos un universo....[/size]

[size=109]↑°°°°ÄNÍMÄ §ÛBTÍLͧ°°°°↓[/size]