[C] Fichier trié ?
Premium
-
hibou57 Messages postés 130 Date d'inscription Statut Membre Dernière intervention -
hibou57 Messages postés 130 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
le code suivant devrait (ce que j'èspère) lire le fichier "lire" et écrire dans le fichier "ecrire" les lignes du fichier précédent trié mais il ne fait pas cela.
j'obtiens dans le fichier "ecrire" ce qu'il y avait dans le fichier "lire".
Le tri n'est pas fait
Est ce que quelqu'un aurait une idée de ce que je dois modifier pour que mon code fonctionne?
Si vous pouviez m'aider.
Merci d'avance
Mon fichier lire est le suivant:
le code suivant devrait (ce que j'èspère) lire le fichier "lire" et écrire dans le fichier "ecrire" les lignes du fichier précédent trié mais il ne fait pas cela.
j'obtiens dans le fichier "ecrire" ce qu'il y avait dans le fichier "lire".
Le tri n'est pas fait
Est ce que quelqu'un aurait une idée de ce que je dois modifier pour que mon code fonctionne?
Si vous pouviez m'aider.
Merci d'avance
Mon fichier lire est le suivant:
un deux trois quatre cinq
#include <stdio.h> #include <string.h> #include <stdlib.h> int tri(FILE *flotLecture, FILE *flotEcriture, int(*cmp)(const char *s1, const char *s2)) { char ligne1[15]; char ligne2[15]; if(flotLecture == NULL) return 1; if(flotEcriture == NULL) return 1; while(fgets(ligne1, sizeof ligne1, flotLecture) != NULL) { long courant = ftell(flotLecture); fseek(flotLecture,0L,SEEK_END); char meilleur_ligne_trouvee[15],tmp[15]; strcpy(meilleur_ligne_trouvee,ligne1); while(fgets(ligne2, sizeof ligne2, flotLecture) != NULL) { if((*cmp)(meilleur_ligne_trouvee,ligne2) > 0) { char buf[BUFSIZ]; strcpy(buf,meilleur_ligne_trouvee); strcpy(meilleur_ligne_trouvee,ligne2); strcpy(tmp,buf); } } fseek(flotLecture,courant,SEEK_SET); fprintf(flotEcriture,"%s",meilleur_ligne_trouvee); } fclose(flotEcriture); fclose(flotLecture); return 0; } int main() { FILE *lecture = fopen("lire","r"); FILE *ecriture = fopen("ecrire","w"); if(tri(lecture,ecriture,&strcmp)) { fprintf(stderr,"erreur \n"); } return 0; }
A voir également:
- [C] Fichier trié ?
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
1 réponse
As-salam alayk yâ Premium
Cette ligne de code m'intrigue...
- Où est déclarée la variable « courant » ?
- Comment varie t-elle ?
- Comment peut tu faire un seek pour écrire une ligne à une position donnée du fichier, sachant que tes lignes n'ont pas toutes la même longeur (je veux dire par là que tu ne peux pas inserer un ligne avant une autre sans avoir à re-écrire tout le fichier)
Je ne sais pas si tu veux absolument garder la même structure pour ton programme. Mais la meilleure solution serait de le re-écrire complétement.
Je te donne la structure shématique qui serait appropriée.
1) Ouverture du fichier source.
2) Chargement en mémoire de toutes les lignes dans un tableau de ligne.
3) Fermeture du fichier source.
4) Tris du tableau de ligne (dans un même tableau, ou un autre tableau).
5) Ouverture du fichier destination.
6) Ecriture du tableau de ligne triées dans le fichier destination.
7) Fermeture du fichier destination.
I wish this may help
Cette ligne de code m'intrigue...
fseek(flotLecture,courant,SEEK_SET);
- Où est déclarée la variable « courant » ?
- Comment varie t-elle ?
- Comment peut tu faire un seek pour écrire une ligne à une position donnée du fichier, sachant que tes lignes n'ont pas toutes la même longeur (je veux dire par là que tu ne peux pas inserer un ligne avant une autre sans avoir à re-écrire tout le fichier)
Je ne sais pas si tu veux absolument garder la même structure pour ton programme. Mais la meilleure solution serait de le re-écrire complétement.
Je te donne la structure shématique qui serait appropriée.
1) Ouverture du fichier source.
2) Chargement en mémoire de toutes les lignes dans un tableau de ligne.
3) Fermeture du fichier source.
4) Tris du tableau de ligne (dans un même tableau, ou un autre tableau).
5) Ouverture du fichier destination.
6) Ecriture du tableau de ligne triées dans le fichier destination.
7) Fermeture du fichier destination.
I wish this may help
je dois trier le fichier en utilisant fseek et ftell sans passer par un tableau pour faire le tri.
Cet exo est à faire de 2 manières : en utilisant un tableau(je l'ai codé) et en utilisant 2 fichiers .
Avec cette seconde maniàre,je n'y arrive pas.
Est ce que vous pourriez m'aider svp.
Merci
Ok, si il est imposé de le résoudre ainsi, je comprends alors.
Je n'ai pas assez de temps, si tu veux je peux repasser demain ou mardi.
Je voulais te dire une chose que je pensais mais que j'avais oublié d'écrire dans le précédent message, c'est que tu as déjà un bon style pour quelqu'un qui commence. Tu choisis des noms de variable qui parle, et on sens que tu essai de soigner ton style d'écriture. C'est une trés bonne chose, et je te souhaite de toujours être comme ça, et de ne pas abandonner cette bonne habitude avec le temps... comme le font trop de programmeur(se)s malheureusement.
A bientôt
P.S. Même si je suis en retard, j'y penserai, c'est promis... bon week-end à toi et bon courage d'ici là.