Ver la versión completa : Cargando datos desde archivo.
Hola! alguien me hecha una mano? =) me podeis decir algun ejemplillo o pagina que muestre una manera simple de cargar datos en c desde un archivo, es para cargar los datos de cada personaje ( las imagenes que corresponden a cada animacion, si atacan, si defienden, etc...), supongo que es cuestion de jugar con fseek y fread... :confused: .
Gracias!
hectorblanco
01/03/2006, 06:35
Te recomiendo echar un vistazo a un parser de XML llamado tinyXML. Puedes poner eso en el google y ya te saldrá la página principal.
Por otra parte, yo lo incorporaré en mi toolkit en futuras versiones, para la gestión de datos y configuraciones.
¿pero usar XML no seria demasiado excesivo? Tengo entendido que procesar XML consume mucha CPU.
A mi tambien me interesa el tema. Supongo que no sera muy dificil interpretar un archivo de texto sencillo, con un dato por línea, sabiendo qué significa cada linea, usando los saltos de linea como separadores
PharaOnyx
01/03/2006, 07:30
Más que ciclos de CPU diría que lo que más consume es RAM. Y más sabiendo que tinyXML es una implementación del estándar DOM (si fuera una implementación de SAX la historia sería diferente), lo que significa que el archivo XML se parsea y se almacena en un árbol en la RAM del sistema, lo que puede consumir bastante (y cuando digo bastante me refiero a varias veces el tamaño del archivo) si es un archivo medianamente 'interesante'. Si lo que tienes es un pequeño archivo con unas pocas líneas (lo más normal si nos referimos a archivos de configuración de programas) con los parámetros básicos de configuración, pues es una alternativa sencilla de usar, rápida de aprender, bastante eficaz y que consume relativamente pocos recursos
Saludos
Creo que esto te servira:
http://c.conclase.net/ficheros/index.php [Ahhh] [Ahhh]
Gade, si pides una manera simple de cargar o escribir datos desde C, lo de XML me parece innecesario por varios motivos. Efegea, supongo que procesar XML sí que debe gastar CPU porque implica un parseo exhaustivo, pero si lo que quiere hacer es cargar datos al principio de la partida, o nivel, tampoco es un problema. Lo chungo sería estar constantemente leyendo.
En cualquier caso, yo lo hago utilizando las llamadas fopen, fclose, fread y fwrite. Aquí tienes un ejemplo de cómo leo el archivo de puntuaciones máximas. Básicamente, hay que abrir lo al principio (fopen), cerrarlo al final (fclose), y en medio ir leyendo los datos (fread). Mi archivo es binario y por eso uso "rb" en fopen ("read, binary"). En cada fread le digo dónde quiero almacenarlo (primer parámetro), el tamaño de los datos que quiero leer, cuántos elementos seguidos, y el identificador del archivo. Mi lectura es secuencial, en el sentido de que no voy avanzando y retrocediendo por el archivo (por eso no uso fseek).
A ver si te sirve:
FILE* arxiu = fopen(nomArxiu, "rb");
if (arxiu == NULL)
{
cerr << "Error llegint <" << nomArxiu << ">" << endl;
exit(1);
}
for (Uint8 i=0; i<30; i++)
{
fread( mPuntuacions[i].mNom, sizeof(char)*4, 1, arxiu);
fread( &(mPuntuacions[i].mPunts), sizeof(Uint32), 1, arxiu);
fread( &(mPuntuacions[i].mNivell), sizeof(Uint8), 1, arxiu);
}
fclose(arxiu);
Por cierto, en este trozo de código hay algo de C++ (cerr, declarar la variable i dentro del bucle). Si lo haces en C supongo que ya sabes que has de utilizar printf y declarar las variables al principio. El resto es lo mismo.
Por cierto, en este trozo de código hay algo de C++ (cerr, declarar la variable i dentro del bucle). Si lo haces en C supongo que ya sabes que has de utilizar printf y declarar las variables al principio. El resto es lo mismo.
El uso de cerr evidentemente es de C++`. pero el lenguaje C permite las declaraciones de variables en el cuerpo de un for tal como tu haces (en el estandar C99)
Hola! muchas gracias por las ideas! de momento el tinyXML es demasiado en todos los aspectos para mis propositos, ayer a la noche comenze una funcion para leerlo a pelo con fopen,fready fclose muy del estilo del tuyo Miq01, gracias de todas formas, cuando lo tenga acabado hoy lo posteo aqui haber que os parece, porque creo que lo estoy haciendo demasiado lioso, en fin ya se vera.
Gammenon
01/03/2006, 19:03
También podrías usar LUA: http://www.lua.org :D
El uso de cerr evidentemente es de C++`. pero el lenguaje C permite las declaraciones de variables en el cuerpo de un for tal como tu haces (en el estandar C99)
¿Ah, sí? Pues yo me había quedado con la idea de que en C todas las declaraciones han de ir al principio de la función.
¿Ah, sí? Pues yo me había quedado con la idea de que en C todas las declaraciones han de ir al principio de la función.
Eso era asi en C90 (y en K&R) pero es una de las modificaciones que se hicieron en C99
Bueno finalmente ya he acabado mi cargador de .aff, es una prueba y por lo tanto tiene fallos y realmente no carga a ningun array nada, pero lo esencial esta, con unos arreglos funciona genial! Es bastante largo, no lo posteo, esta aqui (http://gp2equix.blogspot.com/2006/03/codigos-varios.html). Bueno darme vuestra opinion, y no seais muy crueles!
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions Inc. All rights reserved.