[Pa_Lib] Ayuda para guardar un numero.!!

Necesito de vuestra ayuda para poder guardar un simple número durante el juego y asi cuando vuelvo a encender la consola lo pueda leer y saber por donde voy. He probado los ejemplso de la libreria para guardar en SRAM y los fWrite y fRead, pero no consigo hacerlo funcionar.

¿Alguien sabria darme la solución para guardar un número de 2 dígitos y que pueda leerlo de nuevo
al encender la consola?

Saludos y gracias.
¿Te refieres a guardar el valor de una variable o a una cadena de texto?
Me refiero a una variable, (pero estoy tan desesperao que podria ser tambien una cadena),
¿puedes hecharme un cable?
Dame un par de minutos y te pongo un ejemplo ;).

EDIT:
u8 variable1;
s16 variable2;
s16 variable3[4];


FILE* _FILE_ = fopen ("/Archivo.sav", "wb"); //"wb" = Escribir archivo de 0 (borra lo anterior)
fwrite(&variable1,         //Donde están los datos
                1,         //Numero de bloques a escribir
                1,       //Tamaño de los bloques a escribir
                _FILE_); //Archivo de destino
fwrite(&variable2, 1, 2, _FILE_);
fwrite(&variable3, 4, 2, _FILE_);
fclose(_FILE_);


FILE* _FILE_ = fopen ("/Archivo.sav", "rb"); //"rb" = Leer
fread(&variable1,        //Donde almacenar los datos
                1,       //Número de bloques a leer
                1,        //Tamaño de los bloques a leer
                _FILE_); //Archivo de origen
fread(&variable2, 1, 2, _FILE_);
fread(&variable3, 4, 2, _FILE_);
fclose(_FILE_);
Gracias, parece un ejemplo cojonudo porque me has puesto variables y texto, pero..
¿que es _FILE_?

El compilador me da error en el _FILE_, porque YO NO SÉ como definirlo.
Me aclaras esto por favor...
h2o_Burning escribió:Gracias, parece un ejemplo cojonudo porque me has puesto variables y texto, pero..
¿que es _FILE_?

El compilador me da error en el _FILE_, porque YO NO SÉ como definirlo.
Me aclaras esto por favor...


_FILE_ en el ejemplo que te ha puesto es un puntero a la estructura donde se guarda toda la informacion necesaria sobre el archivo con el que quieres trabajar.
Puedes llamarla _FILE_ o lo que te venga en gana (fich, fpuntos, etc). Edito: puedes llamarlo como te de la gana siempre que la hayas declarado con ese nombre; aclaro esto por si acaso xD.
Si te da errores, prueba a incluir la libreria stdio (#include <stdio.h>) que es donde están todas las funciones de ficheros.

Salu2!
Con incluir <PA9.h> vale.

Fallo mío. Es que yo los uso en distintas funciones y no me da ese error. Pon:
FILE* _FILE_;

antes de nada y luego quitas el
FILE*

de los ejemplos.
Para texto se cambia una cosita:

char * texto1;
char texto2[256];
FILE* _FILE_;

_FILE_ = fopen ("/Archivo.txt", "wb"); //"wb" = Escribir archivo de 0 (borra lo anterior)
fwrite(texto1, //Donde están los datos
256, //Numero de bloques a escribir
1, //Tamaño de los bloques a escribir
_FILE_); //Archivo de destino
fwrite(&texto2, 256, 1, _FILE_);
fclose(_FILE_);


_FILE_ = fopen ("/Archivo.txt", "rb"); //"rb" = Leer
fread(texto1, //Donde almacenar los datos
256, //Número de bloques a leer
1, //Tamaño de los bloques a leer
_FILE_); //Archivo de origen
fread(&texto2, 256, 1, _FILE_);
fclose(_FILE_);

Fijate que quito el "&" cuando es un puntero.
ANTONIOND en este ultimo ejemplo estas poniendo los & en las cadenas (punteros) y en el primer fwrite haces referencia a "texto1" que no está declarado, echale un vistazo ;).

Salu2!
OK. Muchisimas gracias ANTONIOND.

Ya me queda claro el _FILE_ y el copilador corre bien el codigo, ahora lo cambiaré con lo que
necesito que guarde y lo pruebo, espero seguro que funcionará. Muchas gracias por todo.
[beer] Te devo una.
Alber_h escribió:ANTONIOND en este ultimo ejemplo estas poniendo los & en las cadenas (punteros) y en el primer fwrite haces referencia a "texto1" que no está declarado, echale un vistazo ;).

Salu2!

Juas, esto pasa por hacer las cosas rápido XD. Por cierto, los & están bien. Por lo menos yo siempre lo hago así y me funciona.


PD: De nada hombre, para eso estamos :) .
Una duda más, la aplicación desde el emulador no guarda el número en el archivo .SAV y supuse que era problema del emulador, lo probé en la consola y esta se bloquea al llegar al punto de guardar el dato.

¿Sugerencias para poder solucionarlo? (porque a esto si que no llego).
Uso una tarjeta CycloDSEvo
h2o_Burning escribió:Una duda más, la aplicación desde el emulador no guarda el número en el archivo .SAV y supuse que era problema del emulador, lo probé en la consola y esta se bloquea al llegar al punto de guardar el dato.

¿Sugerencias para poder solucionarlo? (porque a esto si que no llego).
Uso una tarjeta CycloDSEvo

Prueba a poner un PA_OutputText antes de cada función para saber donde falla. Es que si no no se que puede fallar.
FILE* _FILE_; //Inicializa memoria para el archivo.
PA_OutputText(1,1,1,"Puntero de archivo"); <--Este mesaje es el unico que aparece antes de bloquearse.

_FILE_ = fopen ("/PruebaES.sav", "wb"); //"wb" = Escribir archivo de 0 (borra lo anterior)
fwrite(&Nivel, //Donde están los datos
1, //Numero de bloques a escribir
1, //Tamaño de los bloques a escribir
_FILE_); //Archivo de destino
PA_OutputText (1,2,2,"Abrierto el archivo"); <---Este no llega a salir
fwrite(&MaxNivel, 2, 2, _FILE_);
PA_OutputText (1,3,3,"Guarda variable");
PA_WaitForVBL ();
fclose(_FILE_);
PA_OutputText (1,4,4,"Cierra archivo");
Pulsa();
Es curioso... Seguramente pase como lo que le pasa a algunas personas con mi Tetris 3DS... Abre bien el archivo, pero al escribir da error... No se... prueba con "wb+" o "w+b", no se cual es el orden adecuado, creo que es el primero. Puede que así se solucione.
He estado probando unas cosillas y tengo un problema con lo siguiente:

   fich = fopen("/prueba.txt", "wt");
   
   if(fich == NULL) return -2;


Aqui el programa retornará 2 cuando no se haya podido crear el fichero, y es que nunca lo crea, no con el iDeaS ni con la Ds.
A ver si podeis echarme una manita.

Salu2!
Alber_h escribió:He estado probando unas cosillas y tengo un problema con lo siguiente:

   fich = fopen("/prueba.txt", "wt");
   
   if(fich == NULL) return -2;


Aqui el programa retornará 2 cuando no se haya podido crear el fichero, y es que nunca lo crea, no con el iDeaS ni con la Ds.
A ver si podeis echarme una manita.

Salu2!

Ni te molestes en probar esas cosas en emuladores, la escritura de FAT no está soportada.

EDIT: ¿¿¿"wt"??? Es "wb".
ANTONIOND escribió:
Alber_h escribió:He estado probando unas cosillas y tengo un problema con lo siguiente:

   fich = fopen("/prueba.txt", "wt");
   
   if(fich == NULL) return -2;


Aqui el programa retornará 2 cuando no se haya podido crear el fichero, y es que nunca lo crea, no con el iDeaS ni con la Ds.
A ver si podeis echarme una manita.

Salu2!

Ni te molestes en probar esas cosas en emuladores, la escritura de FAT no está soportada.

EDIT: ¿¿¿"wt"??? Es "wb".


w = write
r = read
b = binary
t = text

estoy guardando un archivo de texto simple para poder abrirlo mas facilmente y ver el contenido.
pero lo dicho, en la ds tampoco tira y es muy extraño.

Edito: ok ok, no sabia que habia que inicializar el fat :-\. Salu2!

Salu2!
Alber_h escribió:w = write
r = read
b = binary
t = text

estoy guardando un archivo de texto simple para poder abrirlo mas facilmente y ver el contenido.
pero lo dicho, en la ds tampoco tira y es muy extraño.

Edito: ok ok, no sabia que habia que inicializar el fat :-\. Salu2!

Salu2!


No sabía que t = text :P.
ANTONIOND escribió:
Alber_h escribió:w = write
r = read
b = binary
t = text

estoy guardando un archivo de texto simple para poder abrirlo mas facilmente y ver el contenido.
pero lo dicho, en la ds tampoco tira y es muy extraño.

Edito: ok ok, no sabia que habia que inicializar el fat :-\. Salu2!

Salu2!


No sabía que t = text :P.


yo es la primera vez q lo veo
Hay, diox... Mira que olvidarse de iniciar el FAT... ¿Y has puesto también la linea de "if(!fatInitDefault){...}"? Es por si no se ha podido inciar el sistema de FAT, muestra ese mensaje para indicarlo, en vez que quedarse pillado ;)
alexpowerup escribió:Hay, diox... Mira que olvidarse de iniciar el FAT... ¿Y has puesto también la linea de "if(!fatInitDefault){...}"? Es por si no se ha podido inciar el sistema de FAT, muestra ese mensaje para indicarlo, en vez que quedarse pillado ;)


Ah gracias por eso. Es que no me he leido el capitulo sobre el fat de la wiki, sino que al ver este post me dio la curiosidad de ver que podia hacer la DS con esto. Gracias ;).

Salu2!
¡Vaya!, [oki] por fin. Es cierto Alexpowerup que me faltaba iniciar la Fat, gracias por tu observación, era tan simple que no lo veia y tambien gracias a Antoniond por el código, funciona de huevos al usar "wb+", y supongo que no pensaste que NO habia iniciado la Fat, fallo mio.

[beer] Un par de cervecitas que ya os devo. jejejeje. Un saludo a todos.

Por mi, si no es por alguien que tenga problemas tambien a la hora de guardar información, este tema está cerrado.
Es que lo de iniciar el FAT era tan evidente que ni me di cuenta XD.

De nada, hombre.
h2o_Burning escribió:[beer] Un par de cervecitas que ya os devo. jejejeje. Un saludo a todos.

"Devo" es con "b" XD. Bueno, una pregunta: Una vez escritos los datos, ¿Qué datos se escriben? O.O
alexpowerup escribió:
h2o_Burning escribió:[beer] Un par de cervecitas que ya os devo. jejejeje. Un saludo a todos.

"Devo" es con "b" XD. Bueno, una pregunta: Una vez escritos los datos, ¿Qué datos se escriben? O.O


supongo que los de la variable que le hayas metido
keda escribió:
alexpowerup escribió:
h2o_Burning escribió:[beer] Un par de cervecitas que ya os devo. jejejeje. Un saludo a todos.

"Devo" es con "b" XD. Bueno, una pregunta: Una vez escritos los datos, ¿Qué datos se escriben? O.O


supongo que los de la variable que le hayas metido

Ups, es verdad xD. Perdonad la pregunta tonta...
25 respuestas