C/Visual C - Alguien puede explicar que pasa ... ???

 
Vista:

Alguien puede explicar que pasa ... ???

Publicado por Jose (3 intervenciones) el 22/06/2004 18:56:52
Hola, tengo el siguiente codigo para llenar una matriz a partir de un archivo.

void llenamatriz(void)
{
// Declaracion de Variables
int ren=0; // Para control de la matriz

limpiamatriz();
if((TS_INI = fopen("TS_INI.TXT","r")) == NULL) //controla la apertura del archivo en modo de solo lectura
{ //si no existe o se tiene problemas para abrir manda el mensaje y termina.
clrscr(); //solo este procedimiento.
printf("\n Hay problemas para abrir la Tabla de Simbolos.");
fflush(stdin);
getch();
clrscr();
return;
}
else
{
TS_INI=fopen("TS_INI.TXT","r");
while(!feof(TS_INI)) //si el archivo se puede abrir se lee y se asignan los valores en la matriz
{
fscanf(TS_INI,"%s",ct);
fscanf(TS_INI,"%s",tt);
fscanf(TS_INI,"%s",td);
fscanf(TS_INI,"%s",id);
fscanf(TS_INI,"%s",le);
if (renglon!="") // si no hay mas informacion en el archivo termina
{
strcpy(matriz[ren].CT,ct);
strcpy(matriz[ren].TT,tt);
strcpy(matriz[ren].TD,td);
strcpy(matriz[ren].ID,id);
strcpy(matriz[ren].LE,le);
ren++;
}
else
return;
}
fclose(TS_INI);
}
}

y funciona, llena la matriz por ejemplo con la siguiente informacion

matriz({"001","PR","0","hola","hola"},{"","","","",""}, ....
hasta ahi va todo bien
pero si en el archivo encuentra en el ultimo campo por ejemplo "Hola como estas" solo lee hasta el espacio en blanco y el resto no, lo he intentado con fscanf y fread, he intentadi abrir el archivo como binario con "rb" pero aun asi no lee el resto ¿que pasa ? ¿como puedo solucionarlo o que estoy haciendo mal.?
De antemano muchas 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

Creo falta detallar algo para resolver tu problema

Publicado por s (16 intervenciones) el 23/06/2004 07:34:37
Hola.

Creo que hacen falta unos detalles de tu programa para resolver bien el problema. En primer lugar, si pudieras detallar la estructura que usas para la matriz, podría servir para encontrar algo.

En segundo lugar, no entendí muy bien el formato del archivo que estas tratando de leer. ¿Qué estas tratando de leer, cinco lineas o renglones de datos por iteración del ciclo while? o ¿cinco cadenas en un mismo renglón?. En particular, si estas trantando de realizar lo último, dejame comentarte que el fscanf y el fread no son suficientes. Lo que necesitarias sería un separador de tokens (si es el caso, revisa la documentación de la función strtok() )

También, un último detalle. En el código aparece la línea

if (renglon!="") // si no hay mas informacion en el archivo termina

Supongo que renglón es un apuntador a una cadena. El problema es que no puedes utilizar el operador != para saber si una cadena está vacía. Lo que deberías usar es strcmp() en algo como esto:

if( strcmp(renglon, "") == 0 ) //un valor de cero indica cadenas iguales

Ahora que si quieres saber si la cadena es nula, la forma de compararlos es:

if( renglon != NULL)

Bueno, espero te sirvan mis comentarios. Para cualquier cosa, aquí en el foro te pueden ayudar.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

gracias por responder

Publicado por Jose (3 intervenciones) el 23/06/2004 20:31:29
Gracias por respopnder esta es la estructura de la matriz:

#define MAX 255

typedef struct{
char CT[4];
char TT[3];
char TD[2];
char ID[11];
char LE[80];
}SIMBOLOS;

SIMBOLOS matriz[MAX];

El archivo que pretendo guardar en la matriz contiene mas o menos el siguente formato:

001 PR 0 Hola Hola
002 PR 0 Adios Adios
003 PR 0 Saludo Como estas
...

donde las separaciones por espacios definene cada columna, todo funciona bien, supaniendo, hasta el segundo renglon yo puedo guardar la informacion en la matriz y el tercer renglon es lo mismo a no ser por el ultimo token que seria "Como estas" las dos palabras en el mismo topken, revise la documentacion para el uso del strtko() pero dice que se debe de poner el caracter por el cual estan separados los tokens, si yo pongo el espacio en blanco pasaria lo mismo ¿no?, por que el fscanf no respeta o lee hasta donde yo quiero, o talvez la logica que estoy utilizando no es la correcta...

Bueno, muchas gracias por responder y espero que la informacion que agregue sirva para encontrar algo mas, muchas gracias zorro gris... :-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ya te envie un correo

Publicado por s (16 intervenciones) el 24/06/2004 17:46:21
Hola, te envie un correo desde otra cuenta. Si tu dirección no es la correcta, favor de indicarme. Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Recibi el correo

Publicado por Jose (3 intervenciones) el 24/06/2004 22:43:54
Gracias por el correo que enviaste explicando las soluciones, yo queria evitar revisarl caracter por caracter pero ya se me habia ocurrido, no puedo cambiar el fromato del archivo por que es un requicito del proyecto que se separen por espacios, creo que la solucion 2 que enviaste es muy buenoa y creo que es la que aplñicare.
Te estoy muy agradecido y si algun dia puedo ayudarte en algo solo pidelo, que yo respondere ...
Gracias...
:-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar