lecture de fichier : fin de ligne
Tout d'abord bonsoir à tous et merci de l'attention que vous porterez à ce message. Je suis entrain de réaliser un projet en c qui traite diverses informations. Je récupère ces informations dans des fichiers texte, ligne par ligne avec un fgets. Elles sont ensuite distribuées entre plusieurs variables de la manière qui suit :
- j et k prenne la valeur 0 (début du tableau copie qui contient une ligne du fichier)
- j va ensuite se placer a la fin du premier élément avecun while(!isspace(copie[j])) pour l'encadrer
- avec un for(l=k,l<j,l++) le programme recopie dans la variable correspondante
- j avance au début de l'élément suivant, k prend sa valeur, j avance jusqu'à l'espace suivant et ainsi de suite
le premier élément de la ligne est souvent un nombre récupéré par i, qui sert d'indice dans un tableau, n,m et o sont utilisés pour parcourirs d'autres tableaux.
Le problème que je rencontre est localisé en rouge dans le code qui suit :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| FILE *fic1;
/*FILE *fic2;
FILE *fic3;
FILE *fic4;*/
char copie[N];
char temp[N];
nt i,j,k,l,m,n/*,o*/;
fic1 = fopen("pays.txt","r"); //ouverture fichier en ecriture
if ( fic1 == NULL ) { //vérif erreur
printf("erreur d'ouverture\n"); }
else {
while(!feof(fic1)){ //jusqu'à fin fichier fgets(copie,N,fic1); //copie de la ligne j=0; //initialisation début while (!isspace(copie[j])){ //recherche fin for(l=k;l<j;l++){ //parcours numéro temp[m]=copie[l]; //copie numéro
m++; }
temp[m]='\0';
i=atoi(temp);
//printf("%d",i);
j++;
k=j;
while (!isspace(copie[j])){ //recherche fin nom }
m=0; //compteur
for(l=k;l<j;l++){ //parcours nom listepays[i].nom[m]=copie[l]; //copie nom
m++; }
//printf("%s",listepays[i].nom);
j++;
k=j; //récupération début mot
while (!isspace(copie[j])){ listepays[i].capi[m]=copie[l];
m++; }
//printf("%s",listepays[i].capi);
j++;
k=j;
while (!isspace(copie[j])){ listepays[i].cont[m]=copie[l];
m++; }
//printf("%s",listepays[i].cont);
j++;
k=j;
while (!isspace(copie[j])){ listepays[i].gouv[m]=copie[l];
m++; }
//printf("%s",listepays[i].gouv);
j++;
k=j;
while (!isspace(copie[j])){ }
temp[m]='\0';
listepays[i].habi=atoi(temp);
//printf("%d",listepays[i].habi);
n=0; //initialisation compteur
while(copie[j] != '\0'){ //jusqu'à fin ligne copiée
j++;
k=j;
while (!isspace(copie[j])){ //printf("%c",copie[j]);
j++; listepays[i].rich[n][m]=copie[l];
m++; }
//printf("%s",listepays[i].rich[n]);
n++; } }
fclose(fic1); |
Il y a différent printf en commentaires dans le programme, ils servent a tester si les différentes variables sont bien remplies. En arrivant a listepays.rich on est en bout de ligne dans le fichier, les différents éléments, en nombre indéterminé, sont bien tous copiés mais ensuite des tas de caractères bizars s'affichent a la suite. Avec le printf sur j dans la boucle while(!isspace(copie[j])) on obtient la même chose sans les espaces, suite a quoi, mélé aux caractères bizars, apparait un baratin sur windows, le processeur, ...
Je ne sais plus quoi faire. Le while(!isspace(copie[j])) avait été précédemment corrigé. Avant correction la boucle while(!feof(fic1)) se réalisait mais maintenant plus. Cela ajouté au problème précédent me met en déroute, on est trois a tester et rien y fait on arrive pas à résoudre le problème. Si quelqu'un identifie l'erreur, je lui en serait très reconnaissant.