PDA

Ver la versión completa : Problema leyendo de ficheros



Estopero
16/05/2007, 02:51
Hola a todos!
Os escribo esto aqui porque estoy desesperaito xD estoy implementando ahora en el BugaFactor el poder leer las propiedades de cada nivel desde un fichero. Las lineas del fichero podriam ser estas:


[ENEMIE_0]
e_robotic_1.png
0
100

Para leer la linea "e_robotic_1.png" haria:
LeerPropiedad( ENEMIE_0 , 1);

La funcion la he escrito asi:


#include "Ficheros.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

////////////////////////////////////////////////
//FUNCION: funcion_LeerPropiedad
/////////////////////////////////////////////////
char* funcion_LeerPropiedad( char* sPropiedad, int iLinea) {
char cadena[200];
char sPropiedadTemp[200];
char* sResultado;
int iLineaTemp=0;
//Hacemos esto para ir comparando las lineas correctamente hasta encontrar la propiedad buscada
//De tener una cadena "texto" pasamos a tener una cadena "[texto]\n" que es como estan escritas en el fichero
sPropiedadTemp[0]='[';
sPropiedadTemp[1]='\0';
strcat(sPropiedadTemp,sPropiedad);
strcat(sPropiedadTemp, "]\n\0");

//Abrimos el fichero que trae las propiedades del level que toca
FILE *f = fopen("fichero.txt", "r");

//Recorremos el fichero hasta que encontramos la propiedad
while (strcmp(cadena,sPropiedadTemp)!=0)
{
fgets(cadena, 200, f);
}

//Una vez encontrada avanzamos las lineas necesarias para coger el atributo
while (iLineaTemp<iLinea){
fgets(cadena, 200, f);
iLineaTemp++;
}

//Cerramos el fichero
fclose(f);

//Antes de devolver la cadena le quitamos el retorno de carro final
strncpy(sResultado,cadena,strcspn(cadena, "\n"));

return sResultado;

}

El problema esta en que a la salida de la funcion cargo la imagen con la cadena que me devuelve, pero algo va mal y a pesar de que la cadena aparece bien escrita haciendo un printf el programa casca al intentar cargar la imagen. Sin embargo si me salto la funcion y le asigno yo la imagen a mano si funciona, es decir:


sResultado = "e_robotic_1.png";
sResultado2=funcion_LeerPropiedad("ENEMIE_0",1);
atpArrayEnemigos.lista[iControlEnemigoActual].superficie = load_image(sResultado);

Usando la variable sResultado, la carga bien, pero usando la variable sResultado2 casca.
Esta claro que es un problema de la funcion, que manipulo mal las cadenas y algun caracter raro se queda por ahi que no aparece en el printf pero al intentar cargar la imagen no lo pasa por alto y casca :S.

A ver si alguien me puede echar un cable para hacer la funcion sin mis chapuzas y que las cadenas salgan bien, porque no soy capaz :(

ayuda pordioooooo xD

Un saludo!

Salustian
16/05/2007, 09:01
sResultado = "e_robotic_1.png";
sResultado2=funcion_LeerPropiedad("ENEMIE_0",1);
atpArrayEnemigos.lista[iControlEnemigoActual].superficie = load_image(sResultado);

Usando la variable sResultado, la carga bien, pero usando la variable sResultado2 casca.
Esta claro que es un problema de la funcion, que manipulo mal las cadenas y algun caracter raro se queda por ahi que no aparece en el printf pero al intentar cargar la imagen no lo pasa por alto y casca :S.

A ver si alguien me puede echar un cable para hacer la funcion sin mis chapuzas y que las cadenas salgan bien, porque no soy capaz :(

ayuda pordioooooo xD

Un saludo!

Yo lo primero que haría es comparar byte a byte sResultado y sResultado2 para ver cual es la diferencia exacta entre ambas cadenas, y a partir de ahí ver donde está el problema.

Probaría con algo así:



for(int a=0;a<strlen(SResultado);a++)
{
printf("Caracter %d: sResultado = %d ; sResultado2 = %d\n", a+1, sResultado[a], sResultado2[a]);
}

Un saludo.

D_Skywalk
16/05/2007, 12:46
Si te vale, hice pública mi librería de lectura de ficheros INI. Aquí la tienes:

http://david.dantoine.org/contenido/13/

Un Saludo y su funcionamiento es practicamente el mismo que el del ejemplo que has dado y está muy testeada ya que la uso intensivamente en Abalon :)

Estopero
17/05/2007, 17:09
Pues muchas gracias a los dos, voy a ver si consigo arreglarlo facilmente, y si no usare tu libreria skywalk ^^, muchas gracias!!