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í:
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].