Título: Consulta ficheros Publicado por: Godor en 19 Diciembre 2014, 11:13 am Hola amigos, tengo la siguiente duda respecto a un fichero.
El fichero tiene el formato (coordenada x,coordenada y)(coordenada x, coordenada y)---(coordenada x,coordenada y)(coordenada x, coordenada y)---(coordenada x,coordenada y)(coordenada x, coordenada y) Así sucesivamente. Mi idea es guardar en una estructura las coordenadas x1, y1, x2, y2, todas en 4 variables distintas, se como hacer para separar en la linea por el patron "---", pero no sé como guardar en las estructuras como numeros, lo que me quedara (coordenadax, coordenaday)(coordenada x, coordenada y), una vez separado. Alguna ayudita porfa Título: Re: Consulta ficheros Publicado por: eferion en 19 Diciembre 2014, 12:36 pm divide y vencerás. Sabes separar por el primer grupo "---". Presupongo que al "separar", lo elementos que hacen las veces de "separador" se eliminan entonces:
* Coges cada subgrupo y separas por "(". Tras esto te quedan tres subgrupos nuevos: uno vacío y dos con el contenido"coordx,coordy)" y "coordx,coordy)". * Omites el primer subgrupo, y para los dos restantes, eliminas el último carácter de cada uno. * Ahora separas cada uno de estos últimos subgrupos por "," y ya tienes "coordx" y "coordy" correctamente separadas. Es una forma de actuar. Otra forma puede ser: * Recorres la cadena aplicando las siguientes reglas: 1. Si te encuentras "(", entonces es que lo siguiente que viene es la coordenada x 2. Si encuentras ",", has terminado de leer la coordenada x y lo siguiente es la coordenada y 3. Si encuentras ")", has terminado de leer la coordenada y. Si es la primera vez que encuentras este carácter vuelves a repetir el proceso para leer las siguientes coordenadas. Título: Re: Consulta ficheros Publicado por: Orubatosu en 19 Diciembre 2014, 14:40 pm Si la pregunta es "para guardar en un fichero", te diría que simplemente lo separaras con espacios y lineas
Por ejemplo: 22.5 13.22 11.55 -52.22 13.5 11.13 -9.5 6.33 . . . . etc... Simple y fácil, sobre todo porque a la hora de leer el fichero puedes pillar los numeros directamente sin complicarte la vida con separadores de ningún tipo Título: Re: Consulta ficheros Publicado por: Yoel Alejandro en 21 Diciembre 2014, 01:13 am Mmmm, interesante :rolleyes:
Bueno desde mi punto de vista, interpretar el fichero de texto formateado como dices es como hacer un mini-análisis léxico. Es decir, tienes que distinguir los "tokens" o palabras clave en que se divide tu archivo. Los tokens serían por ejemplo:
Cualquier carácter o cadena de caracteres que no encaje en uno de estos patrones sería una palabra no reconocida. Pues bien, tu programa debe leer el fichero de texto de principio a fin, y desglosarlo en los posibles tokens reconocidos. Voy a suponer que cada posible token tiene una longitud máxima de 50 caracteres, por ello la representamos por medio de un array de 51 caracteres (incluyendo el nulo de terminación). Si esto no es así hay opciones como arreglos dinámicos (función realloc(), o la clase string de C++), pero no se si esto sería muy avanzado para que lo pruebes en este momento) Supongamos que tienes un fichero llamado datos.txt con el contenido: (1,2)(3,4)---(10,6)(7,18) Entonces el siguiente programa lee el fichero y lo desglosa en tokens: Código
Observa la salida: token: ( token: 1 token: , token: 2 token: ) token: ( token: 3 token: , token: 4 token: ) token: --- token: ( token: 10 token: , token: 6 token: ) token: ( token: 7 token: , token: 18 token: ) token: o sea, que ha identificado los tokens: "(", "1", ",", ... etc Luego de esto ya tienes divivido el fichero, lo que viene es más fácil. Sólo tienes que agarrar los tokens e irlos asignando como valores de x1, y1, x2, y2. /*************************************************************************************/ (Continuando el tema) Voy a asumir que vas a leer como máximo 10 cuartetas de valores (por supuesto, puedes indicar una cantidad mayor, o si lo prefieres, programar arrays dinámicos que crezcan conforme la necesidad, pero esto es más avanzado) En fin, modifica el código de la función main() de la siguiente manera: Código
La variable "count" lleva el conteo de los cuartetos leidos, que debe ser menor a la constante definida MAX. La variable auxiliar k se utiliza para leer consecutivamente x1, luego y1, luego x2, luego y2. En efecto, aumentamos consecutivamente el valor de k y luego calculamos su resto de la división entera entre 4, el cual puede ser 0, 1, 2 ó 3, es como un contador cíclico que se reinicia continuamente. La salida del anterior programa, es como se muestra: x1 y1 x2 y2 ---------------------------- 1 2 3 4 10 6 7 18 Puedes probar modificando el fichero datos.txt y observando los resultados. Por supuesto, si dicho fichero está escrito de manera incorrecta, los valores obtenidos por el programa no serán correctos, y además no hemos programado rutinas para verificación y validación de datos (aunque sería deseable hacerlo). Estoy a tu disposición si quieres mejorar, ampliar o corregir esta propuesta, o adaptarla mejor a lo que necesitas .... Yoel. |