Problème avec le contenu d'un fichier

Problème avec le contenu d'un fichier - C - Programmation

Marsh Posté le 31-05-2007 à 11:27:44    

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 :
  1. int ajouter(){
  2.         FILE *p;
  3.         int x, a;
  4.         int tab[7];
  5.         p = fopen("C:\\Recuperation.bin","ab" );
  6.         for(x=1; x<=7; x++){
  7.             printf("%d : ", x);
  8.             scanf("%d", &a);
  9.             tab[x-1] = a;     }
  10.         fwrite(tab, sizeof(int), 7, p);
  11.         fclose(p);
  12.               }


Et ensuite je viens le lire (en espérant récuperer le contenu)

Code :
  1. int lecture()
  2.        {
  3.         FILE *c;
  4.         int i, tab2[7];
  5.         c = fopen("c:\\Recuperation.bin","rb" );
  6.                    for(i=1; i<=7; i++)
  7.                         {
  8.                             fread(&tab2[i], sizeof(int),7, c);
  9.                             printf("%d ", tab2[i]);
  10.                         }
  11.                        
  12.              fseek (c, 4 * sizeof(int), SEEK_SET); //Me positionne au début du fichier, ici j'ai mis 4 pensant lire les 4er octets
  13.              ??? // Ici je me demande comment récupérer le contenu de tab2 pour les stocker dans un nouveau tableau
  14.              }
  15.         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.

Message cité 1 fois
Message édité par Atlanted le 31-05-2007 à 12:09:46
Reply

Marsh Posté le 31-05-2007 à 11:27:44   

Reply

Marsh Posté le 31-05-2007 à 11:51:09    

Code :
  1. int i, tab2[7];
  2. // ...
  3.                    for(i=0; i<=7; i++)
  4.                         {
  5.                             fread(&tab2[i], sizeof(int),7, c);
  6.                             printf("%d ", tab2[i]);
  7.                         }


 
ton tableau fait 7 et tu parcours de 0 à 7 inclus. A mon avis c'est une erreur  :??:

Reply

Marsh Posté le 31-05-2007 à 12:09:31    

Oui c'est une erreur de ma part, corrigé mais ça ne répond pas malgré tout à mon souci :)


Message édité par Atlanted le 31-05-2007 à 13:17:22
Reply

Marsh Posté le 02-06-2007 à 05:55:32    

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 :
  1. int ajouter(){
  2.         FILE *p;
  3.         int x, a;
  4.         int tab[7];
  5.         p = fopen("C:\\Recuperation.bin","ab" );
  6.         for(x=1; x<=7; x++){
  7.             printf("%d : ", x);
  8.             scanf("%d", &a);
  9.             tab[x-1] = a;     }
  10.         fwrite(tab, sizeof(int), 7, p);
  11.         fclose(p);
  12.               }


Et ensuite je viens le lire (en espérant récuperer le contenu)

Code :
  1. int lecture()
  2.        {
  3.         FILE *c;
  4.         int i, tab2[7];
  5.         c = fopen("c:\\Recuperation.bin","rb" );
  6.                    for(i=1; i<=7; i++)
  7.                         {
  8.                             fread(&tab2[i], sizeof(int),7, c);
  9.                             printf("%d ", tab2[i]);
  10.                         }
  11.                        
  12.              fseek (c, 4 * sizeof(int), SEEK_SET); //Me positionne au début du fichier, ici j'ai mis 4 pensant lire les 4er octets
  13.              ??? // Ici je me demande comment récupérer le contenu de tab2 pour les stocker dans un nouveau tableau
  14.              }
  15.         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.
 

in_your_phion a écrit :

ton tableau fait 7 et tu parcours de 0 à 7 inclus. A mon avis c'est une erreur  :??:


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.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed