[c++]Guardar y cargar datos de un fichero .txt

Iniciado por lordluisiv, 28 Marzo 2019, 20:48 PM

0 Miembros y 1 Visitante están viendo este tema.

lordluisiv

Hola muy buenos dias, tarde o noche.

Necesito ayuda quiero cargar unas variables en un documento de texto.
aqui esta el codigo.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

#define cls system("CLS");

FILE *doc;
int guardar();
int cargar();

int main()
{
int selec;
printf("1.Guardar dato \n2.Cargar datos\n");
selec = getch();

if(selec < '1' || selec > '2')
{
cls
printf("Esa opcion no es vailda\n\n");
main();
}

switch(selec)
{
case '1': {
guardar();
break;
}
case '2': {
cargar();
break;
}
}

return 0;
}

int guardar()
{
cls
doc = fopen("registro.txt","a+");
int a,b,c;

printf("introduce el valor a la variable A: ");
scanf("%d", &a);

printf("introduce el valor a la variable B: ");
scanf("%d", &b);

printf("introduce el valor a la variable C: ");
scanf("%d", &c);

fprintf(doc, "VARIABLE A = %d\n", a);
fprintf(doc, "VARIABLE A = %d\n", b);
fprintf(doc, "VARIABLE A = %d\n", c);
fclose(doc);
cls
return main();
}

int cargar()
{
doc = fopen("registro.txt","r");
int c;

if(doc == NULL)
{
printf("ERROR EN EL ARCHIVO");
return 1;
}               

printf("\n\n\t--------Datos Cargados--------\n");
while((c = getc(doc)) != EOF)
{
if(c == '\n')
{
printf("\n");
}else if(c == '='){
printf("\n");
}else{
printf("%c",c);
}

}
fclose(doc);
return 1;
}


en el documento de texto se guarda de esta forma

VARIABLE A = 39
VARIABLE A = 21
VARIABLE A = 3


todo bien por ahora, el problema que tengo es que cuando el programa me imprime los resultados los imprime asi.

VARIABLE A
  39
VARIABLE B
  21
VARIABLE C
  3


como puedo hacer que solo imprima el valor de la variable sin el "VARIABLE *" o solo imprimir el valor de la variable C si se desea

K-YreX

  • Aunque en el título pone C++ tiene toda la pinta de estar en C...
  • No uses la librería <conio.h> (no es estándar). La función <getch()> de <conio.h> se puede sustituir por <cin.get()> de <iostream> (C++) o por <getchar()> de <stdio.h> (C).
  • En vez de hacer un <if> para ver si la opción es distinta de 1 y 2, usa un filtro <do while> que es más común en vez de llamar a la función <main> dentro del propio <main>.
  • Cuando escribes en el fichero, escribes siempre A, cambialo para escribir B y C.
  • <return main()> mejor que no. Si quieres que se puedan hacer más veces las operaciones haz un bucle (por ejemplo mientras la opción sea distinta a 3 y si es 3 acabas)
  • Esas funciones mejor que sean void.


    Como conoces la estructura del fichero:

    string + char + char + int

    Crea una variable para guardar cada valor y luego ya haz lo que quieras con ello. Es decir para leer una línea, léela por palabras y luego muestra solo la variable de tipo <int> que es donde has guardado el número. Suerte :-X
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

lordluisiv

Gracias por los consejos aunque no entendi mucho, soy nuevo en esto, pero ¿me podrias explicar un poco mas detallado?, porfa

K-YreX

No sé qué parte es la que quieres que te explique pero imagino que es la solución a tu pregunta. Tienes un fichero de texto que guarda:

string (VARIABLE) + char (A/B/C) + char (=) + int (numero)

Lo que tú haces es guardar caracter a caracter en <c> e ir mostrándolos. En lugar de eso crea una variable de tipo <string>, otras dos de tipo <char> y otra de tipo <int>. Entonces guardas en la de tipo <string> la palabra "VARIABLE", en la primera de tipo <char> la letra y en la segunda el "=" y en la de tipo <int> el número. Entonces puedes mostrar sólo la de tipo <int> para mostrar el número o hacer un condicional que si la variable que guarda la letra es igual a {A, B, C} muestre el valor de la de tipo <int> y sino no.
Una vez tienes toda la información del fichero en variables puedes hacer lo que quieras con ello. Las variables las puedes sobreescribir para ahorrar en memoria ya que siempre vas a guardar "VARIABLE" e "=". Si quieres almacenar cada letra con su número correspondiente de forma más "permanente" (que puedas usarlas luego en el programa) entonces ya podrías hacerlo con un array de <char> y otro de <int> o usando clases o estructuras. Pero para lo que quieres hacer no es necesario.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

lordluisiv

Ok ahora si entiendo, muchas gracias YreX-DwX