Sve@r | Atlanted a écrit :
Bonjour,
J'ai un souci quant à la récupération de données dans un fichier. J'aimerais en faite savoir comment récuperer le contenu de chaque données inscrites dans mon fichier.
Voici mon fichier où j'écris mes donées (crée une 1ère fois au préalable en w+)
Code :
- int ajouter(){
- FILE *p;
- int x, a;
- int tab[7];
- p = fopen("C:\\Recuperation.bin","ab" );
- for(x=1; x<=7; x++){
- printf("%d : ", x);
- scanf("%d", &a);
- tab[x-1] = a; }
- fwrite(tab, sizeof(int), 7, p);
- fclose(p);
- }
|
Et ensuite je viens le lire (en espérant récuperer le contenu)
Code :
- int lecture()
- {
- FILE *c;
- int i, tab2[7];
- c = fopen("c:\\Recuperation.bin","rb" );
- for(i=1; i<=7; i++)
- {
- fread(&tab2[i], sizeof(int),7, c);
- printf("%d ", tab2[i]);
- }
-
- fseek (c, 4 * sizeof(int), SEEK_SET); //Me positionne au début du fichier, ici j'ai mis 4 pensant lire les 4er octets
- ??? // Ici je me demande comment récupérer le contenu de tab2 pour les stocker dans un nouveau tableau
- }
- fclose(c); }
|
J'ai du mal à bien comprendre le fonctionnement de fseek ce qui fait que je vois mal comment récuperer ce que je veux.
Merci pour vos réponses.
|
fseek te positionne sur l'octet "x" du fichier; "x" pouvant être vu comme
- la position absolue en utilisant le flag SEEK_SET
- une avancée ou un recul de "x" (tout dépend si "x" est positif ou négatif) par rapport à la position actuelle en utilisant le flag SEEK_CUR
- un recul de "x" depuis la fin du fichier en utilisant le flag SEEK_END
Donc ta politique si tu veux relire ce qui a été écrit doit être de faire :
- j'écris "n" valeurs de type "int"
- je recule de "n * sizeof(int)" octets avec fseek(p, -n * sizeof(int), SEEK_CUR)
- je relis mes "n" valeurs de type "int"
Maintenant, je ne comprends pas trop ta boucle de relecture. Pourquoi tu fais 7 fois lire 7 int ??? Soit tu fais 7 fois lire UN int, soit tu fais UNE fois lire 7 int !!!
Autre problème dans ta lecture => tu fais commencer "i" à "1" et tu vas remplir "tab[i]" alors qu'un tableau commence à 0. Tu dois donc faire remplir "tab[i - 1]" comme t'avais fait à la saisie... ou mieux, te mettre à programmer selon les concepts du langage que tu utilises (et non selon des concepts vaguements esthétiques) et prendre l'habitude de travailler sur un tableau à partir de 0...
PS: Dans ta saisie, la variable "a" est totalement inutile.
Hum... perspicace. A mon avis aussi
Message édité par Sve@r le 05-06-2007 à 18:47:47 ---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
|