Iniciar sesión

Ver la versión completa : como leer y escribir archivos de configuracion



efegea
29/06/2006, 23:48
Bueno no es exactamente archivos de configuración pero es el mismo formato.

Lo necesito para leer y escribir un archivo con información de todos los niveles del juego, y otro con los datos de la partida guardada.

Por ejemplo:


NUMEROHABITACIONES: 4

NUMERO 1
NOMBRE Bosque
FONDO fondo1.png
DUREZAS durezas1.png
NUMEROENEMIGOS 2
ENEMIGO zombi 200 145
ENEMIGO vampiro 450 200

NUMERO 2
NOMBRE Entrada al castillo
....

Necesito escribir unas funciones que recorran el archivo y vayan asignando los datos a las variables, recorriéndolo con un bucle for.

La cuestión es que no sé como leer un archivo secuencialmente. Sólo conozco fscanf, pero es una solucion muy cutre, ya que tendría que escribir en el código todo el contenido del archivo ("NUMERO %i NOMNRE %s.....") y no sería dinámico :rolleyes:

¿Alguna pista?

Mariner_I
29/06/2006, 23:56
y si en vez de usar archivos de texto los usas binarios y con estructuras?

efegea
30/06/2006, 00:01
¿En binario no sería más dificil? No se, además me gustaría que el archivo fuese descriptivo (quiero decir, con las etiquetas NOMBRE y eso, que se pudiese modificar facilemente en un editor de texto, aunque haré un editor de niveles)

D_Skywalk
30/06/2006, 00:04
Si usas las SDK oficiales puedes usar la libreria que incluyen: SDL_inifile.h

Un Saludo :)

Theck
30/06/2006, 00:05
Si no fuera porque no creo en la telekinesis, estás pidiendo exactamente lo que necesito para cierto proyecto xD

Yo había pensado en simplemente leerlo línia a línia buscando el string y luego "partiendo" la cadena usando el caracter espacio. Es cutre, poco optimo, pero bueno, solo lo harías una vez al iniciar el nivel, luego lo guardas en memoría dentro de estructuras.

miq01
30/06/2006, 00:45
La cuestión es que no sé como leer un archivo secuencialmente. Sólo conozco fscanf, pero es una solucion muy cutre, ya que tendría que escribir en el código todo el contenido del archivo ("NUMERO %i NOMNRE %s.....") y no sería dinámico :rolleyes:
No entiendo muy bien qué pega le ves a fscanf. ¿Qué le ves de malo a hacer algo como esto?

fscanf(fichero, "NUMEROHABITACIONES %d", &numeroHabitaciones);

for (int i=0; i<numeroHabitaciones; i++)
{
fscanf(fichero, "NUMERO %d", &numero);
fscanf(fichero, "NOMBRE %s", nombre);
[...]
}

efegea
30/06/2006, 00:51
No entiendo muy bien qué pega le ves a fscanf. ¿Qué le ves de malo a hacer algo como esto?

fscanf(fichero, "NUMEROHABITACIONES %d", &numeroHabitaciones);

for (int i=0; i<numeroHabitaciones; i++)
{
fscanf(fichero, "NUMERO %d", &numero);
fscanf(fichero, "NOMBRE %s", nombre);
[...]
}

Quizás no he entendido bien el funcionamiento de fscanf. ¿en cada llamada va avanzando por el fichero? ¿busca la cadena especificada?

miq01
30/06/2006, 00:55
Quizás no he entendido bien el funcionamiento de fscanf. ¿en cada llamada va avanzando por el fichero? ¿busca la cadena especificada?
Sí, ¿no? :) Por un momento me has hecho dudar, pero mírate el ejemplo al final de esta página (http://www.cplusplus.com/ref/cstdio/fscanf.html). Esta claro que tú sabes qué formato tiene tu fichero, y por lo tanto sabes que después de "NUMERO <entero>" viene un "NOMBRE <cadena>", etc., o sea que yo creo que es LA función.

efegea
30/06/2006, 01:21
Bueno ya he hecho un miniprogramita que lee de un archivo los datos y los muestra en pantalla, funciona muy bien, muchas gracias por el enlace miq01