Título: Lectura Fichero caracter a caracter Publicado por: P.AGCD en 18 Julio 2011, 18:21 pm Tengo un problema, mi codigo no lee correctamente el fichero y no se arreglarlo.
Veamos tengo que leer el fichero de esta manera Equipo1 - Equipo2 : resultado1 resultado2 FICHERO: Luis y Pepe-Los Supermuseros: 5 0 Sevillanos-Pili y Mili: 2 3 Javier y Lopez-Valencia:4 1 Pili y Mili-Luis y Pepe: 2 3 Los Supermuseros-Javier y Lopez: 0 5 #include <stdio.h> #include <stdlib.h> #include <string.h> # define MAX 80 # define MAX_EQUIPOS 15 # define MAX_PARTIDAS 40 typedef struct { char NombreEquipo [MAX]; int puntos; int numpartidas; int numpartidasganadas; int numpartidasperdidas; } Equipo; typedef struct { Equipo InformacionEquipo [MAX_EQUIPOS]; int numequipos; }Lista_Equipos; typedef struct { char Equipo1 [MAX]; char Equipo2 [MAX]; int Resultado1; int Resultado2; }Partida ; typedef struct { Partida InformacionPartida [MAX_PARTIDAS]; int numpartidas; }Lista_Partidas; void LeerArchivoPartida (Lista_Equipos *ListaEquipos, Lista_Partidas *ListaPartidas) { int i=0; int p=0; int k=0,j=0; char caracter; FILE *archivoPartida; archivoPartida = fopen ("Resultados.txt", "r"); if (archivoPartida == NULL) { printf("NO EXISTE EL FICHERO!\n"); exit(1); } while (!feof(archivoPartida)) { caracter = fgetc(archivoPartida); while (caracter!='-') { ListaPartidas->InformacionPartida.Equipo1[k]=caracter; caracter=fgetc(archivoPartida); k++; if (caracter=='-') ListaPartidas->InformacionPartida.Equipo1[k]='\0'; } while (caracter!=':') { ListaPartidas->InformacionPartida.Equipo2[j]=caracter; caracter=fgetc(archivoPartida); j++; if (caracter==':') ListaPartidas->InformacionPartida.Equipo2[j]='\0'; } puts(ListaPartidas->InformacionPartida.Equipo1); printf("\n"); puts(ListaPartidas->InformacionPartida.Equipo2); printf("\n"); fscanf(archivoPartida, "%d %d", &ListaPartidas->InformacionPartida.Resultado1,&ListaPartidas->InformacionPartida.Resultado2); printf("%d %d", ListaPartidas->InformacionPartida.Resultado1,ListaPartidas->InformacionPartida.Resultado2); i++; } Título: Re: Lectura Fichero caracter a caracter Publicado por: Ferno en 18 Julio 2011, 21:26 pm 1° Recuerda usar GeSHi para postear código, lo cual facilita la lectura (al menos un poco).
2° A simple vista, te falta leer un caracter entre los dos primeros loops, es decir: Código
3° Exactamente ¿Cuál es el error? Título: Re: Lectura Fichero caracter a caracter Publicado por: rir3760 en 19 Julio 2011, 00:47 am Tengo un problema, mi codigo no lee correctamente el fichero y no se arreglarlo. Va a ser difícil ayudarte con tu problema ya que no presentas el código fuente completo de esa función.Hay algunos nombres que deberían ser mas largos, por ejemplo tienes "MAX", si bien es un máximo no hay forma de saber de que, seria mejor algo como "MAX_LONG_ALGO". Otros nombres deberían ser mas cortos, por ejemplo en el tipo "Equipo" no es necesario indicar que el campo es "NombreEquipo" ya que eso se saca del contexto, bastaría con solo "nombre". En cuanto al bucle principal en este no es necesario colocar la condición de escape dentro del bucle interno, eso lo das por sentado al finalizar el bucle. Esto: Código
Lo puedes reducir a: Código Se ve muy feo pero eso es a causa de los nombres excesivamente largos, del contexto se deduce que "ListaEquipos" y "ListaPartidas" son listas así que se pueden reducir a solo "equipos" y "partidas" sin afectar la claridad del código fuente. Por cierto la variable "caracter" (mejor dejarlo como "car" o "ch") debe ser del tipo "int" ya que ese es el tipo de retorno de la función "fgetc". Algo que también falta es descartar el resto de la linea (al menos el '\n') después de la llamada a fscanf, eso se consigue con: Código
Una forma de leer las lineas almacenadas en un archivo y con el formato que indicas es: Código
Un saludo |