C/Visual C - ayuda con lectura de archivo con estructura espesifica

 
Vista:

ayuda con lectura de archivo con estructura espesifica

Publicado por yonatan (23 intervenciones) el 30/08/2011 06:16:01
hola , soy nuevo por aca y confiaba en que puedan ayurdarme a resolver este problema que me tiene a maltraer hace unos dias ...les comento , nesesito leer archivos que genera el programa de Pokerstart a medida que uno va jugando, el programa va agregando a un archivo las acciones que realizan cada usuario en sus respectivas manos...la estructura que possen este archivo es la siguiente:

Juego de PokerStars #64023139396: Torneo n.º 409392077, 0.10 $+0.01 $ USD Hold'em No Limit - Nivel I (10/20) - 01-07-2011 19:00:01 ET

Mesa '409392077 118' 9-max Asiento n.º 1 es el botón

Asiento 1: gustimoron (1500 en fichas)

Asiento 2: jaherso911 (1500 en fichas) está ausente

Asiento 3: krlos288 (1500 en fichas)

Asiento 4: marphels (1500 en fichas)

Asiento 5: FakerPint186 (1500 en fichas)

Asiento 6: DANNY_BroDD (1500 en fichas)

Asiento 7: indiolatinus (1500 en fichas)

Asiento 8: RESPED (1500 en fichas)

Asiento 9: Q´Macanuda (1500 en fichas)

jaherso911: pone ciega pequeña 10

krlos288: pone ciega grande 20

*** CARTAS PROPIAS ***

Repartidas a indiolatinus [Qh 5h]

marphels: se retira

FakerPint186: sube 1480 a 1500 y está all-in

DANNY_BroDD: se retira

indiolatinus: se retira

RESPED: se retira

Q´Macanuda: se retira

gustimoron ha agotado su tiempo

gustimoron: se retira

jaherso911: se retira

gustimoron está ausente

krlos288: se retira

La apuesta no igualada (1480) ha sido devuelta a FakerPint186

FakerPint186 recaudó 50 de bote

*** RESUMEN ***

Bote total 50 | Comisión 0

Asiento 1: gustimoron (botón) se retiró antes del Flop (no apostó)

Asiento 2: jaherso911 (ciega pequeña) se retiró antes del Flop

Asiento 3: krlos288 (ciega grande) se retiró antes del Flop

Asiento 4: marphels se retiró antes del Flop (no apostó)

Asiento 5: FakerPint186 recaudó (50)

Asiento 6: DANNY_BroDD se retiró antes del Flop (no apostó)

Asiento 7: indiolatinus se retiró antes del Flop (no apostó)

Asiento 8: RESPED se retiró antes del Flop (no apostó)

Asiento 9: Q´Macanuda se retiró antes del Flop (no apostó)

Esto vendria a ser solo la descripcion de una mano , luego el programa va agregando abajo de cada mano la descripcion de la siguiente mano , mi problema puntual es que logro que mi codigo leea una mano completa , pero al momento de poner un bucle para que lea las demas manos..este ya no responde y devuelve codigo de lineas del archivo totalmente aleatorias...quisiera que me ayudaran a resolver este problema...y si no me explique bien...solo pregunten...es importante para mi resolver este problema. les dejo el codigo que tengo hasta ahora...




#include <stdio.h>

#include <stdlib.h>

#include <string.h>



int main ()



{













struct jugadores{



char nombre[20];

int fichas;

char posicion[1];

char estado[20];

char m;

char accion [20];

int apuesta;

int cantapuesta;

int cantsube;

int cantigualada;

int manosganadas;

int Cchica;

int Cgrande;

char cartasmias[10];



}asiento[10];



//DECLARACION DE LA ESTRUCTURA



FILE* archivo;

char a[200];

char buscar[20];

char* c;

char d;

char* AUX;

char h=0;

char l=0;

int t=0;

char q=0;

char* AUX1;

char r=0;





if (!(archivo = fopen ("C:\\archivo1.txt","r"))) // VERIFICA SI SE PUDO ABRIR EL ARCHIVO EN CUESTION



{

printf ("No se pudo abrir archivo");





}



else



{









do



{



fgets(a,200,archivo);





if (AUX = strstr(a,"Asiento"))



{



if (!(AUX = strstr (a,"Mesa" "bot" "se" "antes" "recaudo" )))



{





AUX = strtok(a, " " );

// printf ("%s\n",a);



AUX = strtok(NULL, " " ":");

// printf ("%s\n", AUX);



strcpy (asiento[l].posicion,AUX);



AUX = strtok(NULL, " ");

// printf ("%s\n",AUX);

strcpy(asiento[l].nombre,AUX);

// printf("%s\n",asiento1.nombre);



AUX = strtok(NULL, " " "(");



asiento[l].fichas = atoi(AUX);



// printf("%d\n", asiento1.fichas);



printf("\n");



printf("%s\t",asiento[l].nombre);

printf("%d\t", asiento[l].fichas);

printf("%s\n",asiento[l].posicion);





l++;



}

}





} while (!(AUX = strstr (a,"pone ciega peque")));



}



do



{





if (AUX = strstr(a,"pone ciega peque"))





{





for (q=0;q<9;q++)



{





if (AUX = strstr(a,asiento[q].nombre))



{



AUX = strtok(a," ");

AUX = strtok(NULL, " " ":");

AUX = strtok(NULL," ");

AUX = strtok(NULL," ");

AUX = strtok(NULL," ");





// printf("%s\n",AUX);

asiento[q].Cchica = atoi(AUX);





printf(" el jugador %s pone ciega chica %d\n",asiento[q].nombre,asiento[q].Cchica);







}

}

}



fgets(a,200,archivo);



if (AUX = strstr(a,"pone ciega grande"))



{

for (q=0;q<9;q++)



{





if (AUX = strstr(a,asiento[q].nombre))



{



AUX = strtok(a," ");

AUX = strtok(NULL, " " ":");

AUX = strtok(NULL," ");

AUX = strtok(NULL," ");

AUX = strtok(NULL," ");





// printf("%s\n",AUX);

asiento[q].Cgrande = atoi(AUX);





printf(" el jugador %s pone ciega grande %d\n",asiento[q].nombre,asiento[q].Cgrande);







}

}

}





} while (!(AUX = strstr (a,"*** CARTAS PROPIAS ***")));





//---------------------------------------------------ACA EMPIESA CARTAS PROPIAS---------------------------------------------





//---------------------------------------------------CARTAS PROPIAS---------------------------------------------------------------





fgets(a,200,archivo);







for (q=0;q<9;q++)



{



if (AUX1 = strstr(a,asiento[q].nombre))



{



AUX = strtok(a," ");



AUX = strtok(NULL," ");



AUX = strtok(NULL," ");



AUX = strtok(NULL,"[" "]");





strcpy (asiento[q].cartasmias,AUX);

printf("repartidas a %s = %s\n",asiento[q].nombre, asiento[q].cartasmias);



}

}

//-------------------------------------------------------------------------------------------------------------------------------------



//------------------------------------------------------COMIENZO DE LECTURA DE ACCIONES DE JUGADORES---------------------------------





char* accion;



char retira[20] = "retira";

char apuesta[20] = "apuesta";

char pasa[20] = "pasa";

char ausente[20] = "ausente";

char sube[20] = "sube";

char ANI[30] = "apuesta no igualada";

char Tagotado[30] ="ha agotado su tiempo";

char iguala[10] = "iguala";

char recaudo[20]= "recaud";



char cartaspropias[30]= "*** CARTAS PROPIAS ***";

char resumen[20]= "*** RESUMEN ***";

char flop[20] = "*** FLOP ***";

char turn[20] = "*** TURN ***";

char river[20] = "*** RIVER ***";



char JeJ= 9;

char x = 0;

char m;



char* AUX2;

int AUX3;





do



{



fgets(a,200,archivo);



for (x=0;x<9;x++)



{



if (AUX=strstr(a,asiento[x].nombre))



{



//----------------------------------------------------------------------------------------------------------------------



if (accion = strstr(a,retira))



{



strcpy(asiento[x].accion,retira);

printf("el jugador %s se retira\n",asiento[x].nombre);



}



//----------------------------------------------------------------------------------------------------------------------





if (accion = strstr (a,apuesta))



{



if (!(accion = strstr(a,ANI)))



{

strcpy (asiento[x].accion,apuesta);





asiento[x].fichas = asiento[x].fichas - asiento[x].apuesta;//RESTA A LA CANTIDAD DE FICHAS DISPONIBLES MENOS LAS QUE APOSTO.

printf("el jugador %s = %s\n",asiento[x].nombre,asiento[x].accion);



AUX2 = strtok(a," ");

AUX2 = strtok(NULL," ");

AUX2 = strtok(NULL," ");



// LAS SGTES LINEAS ASIGNAN LA CANTIDAD APOSTADA AL JUGADOR...



asiento[x].cantapuesta = atoi(AUX2);

printf("%d\n",asiento[x].cantapuesta);



asiento[x].fichas = asiento[x].fichas - asiento[x].cantapuesta;

printf("cantidad apostada por %s es = %d\n",asiento[x].nombre,asiento[x].cantapuesta);



}



}



//-----------------------------------------------------------------------------------------------------------------------







if (accion = strstr (a,pasa))



{



strcpy (asiento[x].accion,pasa); //UN JUGADOR SOLO PUEDE PASAR SI NADIE HA HECHO UN APUESTA O SI ESTA EN POSICION DE CIEGA

printf("el jugador %s = %s\n", asiento[x].nombre,asiento[x].accion);

}

//-----------------------------------------------------------------------------------------------------------------------







if (accion = strstr (a,ausente))



{



strcpy (asiento[x].accion,ausente);

//asiento[x].estado = asiento[x].accion;

printf("el jugador %s = %s\n",asiento[x].nombre,asiento[x].accion);

}







//-----------------------------------------------------------------------------------------------------------------------



if (accion = strstr(a,sube))



{



strcpy (asiento[x].estado,sube);// ASIGNA A LA VARIABLA ACCION DEL JUGADOR EL VALOR SUBE..

printf("el jugador %s= %s\n",asiento[x].nombre,asiento[x].estado);



AUX2= strtok(a," ");

AUX2= strtok(NULL," ");

AUX2= strtok(NULL," ");









asiento[x].cantsube = atoi(AUX2);

printf("el jugador %s sube %d \n",asiento[x].nombre,asiento[x].cantsube);



AUX2=strtok(NULL," ");

AUX2=strtok(NULL," ");



asiento[x].fichas = asiento[x].fichas - atoi(AUX2);;

printf("cantidad de fichas del jugador %s son %d\n",asiento[x].nombre,asiento[x].fichas);







}





//-----------------------------------------------------------------------------------------------------------------------







if (accion = strstr(a,ANI))



{



strcpy (asiento[x].estado,ANI);

printf("el ganador es %s = %s\n",asiento[x].nombre,asiento[x].estado);

asiento[x].fichas = asiento[x].fichas + asiento[x].cantsube;

printf("se devuelven %d fichas al jugador\n",asiento[x].cantsube);



}





//-----------------------------------------------------------------------------------------------------------------------







if (accion = strstr(a,Tagotado))



{



strcpy (asiento[x].estado,Tagotado);



printf("El jugador %s ha agatado su tiempo\n",asiento[x].nombre);





}





//-----------------------------------------------------------------------------------------------------------------------





if (accion = strstr(a,iguala))





{



if (!(accion = strstr(a,ANI)))



{



strcpy(asiento[x].accion,iguala);



AUX2 = strtok(a," ");

AUX2 = strtok(NULL, " ");

AUX2 = strtok(NULL, " ");



asiento[x].cantigualada = atoi(AUX2);



asiento[x].fichas = asiento[x].fichas - asiento[x].cantigualada;

printf("iguala %d\n",asiento[x].cantigualada);

}

}





//-----------------------------------------------------------------------------------------------------------------------







if (accion = strstr(a,recaudo))



{





AUX2=strtok(a," ");

AUX2=strtok(NULL," ");

AUX2=strtok(NULL," ");





printf("el jugador %s ha ganado %d en esta mano\n",asiento[x].nombre,atoi(AUX2));



asiento[x].fichas = asiento[x].fichas + atoi(AUX2);

printf("cantidad de fichas es igual a %d\n",asiento[x].fichas);



}











//-----------------------------------------------------------------------------------------------------------------------





}



}





}while (!(AUX=strstr(a,resumen)));



fgets(a,200,archivo);

printf("%s\n",a);



do



{



char resuflop[40]= "antes del Flop";

char resurecaudo[20]= "recaud";

char resuflop1[40]= "se retir en el flop";

char resudesc[30]= "se retir sin mostrar";

char resuperdio[20]= "mostr y perdi";

char resugano[20]= "mostr y gan";

char resuriver[30]= "se retir en el river";

char resuturn[20]= "se retir en el turn";

char resuboton[20]= "Bote total";







if (AUX=strstr(a,resuboton))



{



printf("la linea se encontro\n");

printf("%s\n",a);



}



if (AUX=strstr(a,resuflop))



{



printf("la linea se encontro");

printf("%s\n",a);



}





if (AUX=strstr(a,resurecaudo))



{



printf("la linea se encontro");

printf("%s\n",a);





}



if (AUX=strstr(a,resuflop1))



{



printf("la linea se encontro");

printf("%s\n",a);



}



if (AUX=strstr(a,resudesc))



{



printf("la linea se encontro");

printf("%s\n,",a);



}



if (AUX=strstr(a,resuperdio))



{



printf("la linea se encontro");

printf("%s\n",a);



}



if (AUX=strstr(a,resugano))



{



printf("la linea se encontro");

printf("%s\n",a);



}



if (AUX=strstr(a,resuriver))



{



printf("la linea se encontro");

printf("%s\n",a);



}



if (AUX=strstr(a,resuturn))



{



printf("la linea se encontro");

printf("%s\n",a);



}



if (AUX=strstr(a,resuboton))



{



printf("la linea se encontro");

printf("%s\n",a);



}







fgets(a,200,archivo);





}while(!(AUX =strstr(a,"Juego")));

printf("%s\n",a);





}



puede que sea un poco confuso y que alla variables que no son usadas (por ahora), tambien tengo que remplazar los IF por swich -case , pero es un codigo preliminar....espero puedan ayudarme.

gracias...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder