Cita de: MAFUS en 25 Septiembre 2016, 20:15 PM
Muy buenas. Para solucionar tu problema con las comas puedes hacer uso de una funcionalidad un poco más avanzada de fscanf. Impresión queda así:Código [Seleccionar]void IMPRESION()
{
FILE*fd;
int doc,i=0;
char nombre[50]={0},pais[50]={0};
fd=fopen("C:\\Users\\Pablo-PC\\Desktop\\personas.txt","r");
printf("Documento\tNombre\tPais\n");
fscanf(fd,"%d,%[^,],%[^\n]",&doc,nombre,pais);
while(!feof(fd) && i<N)
{
printf("%d,%s,%s\n",doc,nombre,pais);
fscanf(fd,"%d,%[^,],%[^\n]",&doc,nombre,pais);
i++;
}
fclose(fd);
}
La cadenade control de fscanf ha cambiado un poco.
Tu idea de usar comas separadoras está bien, pues es el mismo formato que scanf va a recibir y va a desechar esas comas. El problema venía que recogías tanto nombre como país con el argumento %s que coge toda la cadena hasta que haya un espacio en blanco (tabulación, nueva línea, etc.) por lo que también te pillaba la coma.
Sin embargo haciendo uso de %[^,] le dices a fscanf: guarda la cadena hasta que encuentres el caracter coma (los corchetes indican los caracteres que debe recoger fscanf, el acento circunflejo al principio indica negación, es decir, que se debe recoger todos los caracteres hasta encontrar uno de esa lista). Así que capturarás toda la cadena hasta que llegues a la coma.
Después te encuentras la coma que vas a desechar y empieza otra captura de cadena hasta que llegue al final de ésta, el caracter de nueva línea, como marca %[^\n].
Wow, no sabia que se podia hacer eso!. Ahora si lee todo. Te hago una ultima consulta. Como puedo hacer para que me quede la impresion de manera ordenada?.
Porque supongamos que los datos del txt son asi:
39581882,agustin,francia
39149112,Ricardo Lopez,Argentina
41959129,Agustin,Grecia.
Entonces cuando quiero imprimir me queda un poco descordinado la parte de paises y nombres y no me queda del todo prolijo, con los \t no lo pude solucionar