Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1291 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Problème avec le contenu d'un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec le contenu d'un fichier

n°1567734
Atlanted
Posté le 31-05-2007 à 11:27:44  profilanswer
 

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
mood
Publicité
Posté le 31-05-2007 à 11:27:44  profilanswer
 

n°1567766
in_your_ph​ion
Posté le 31-05-2007 à 11:51:09  profilanswer
 

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  :??:

n°1567783
Atlanted
Posté le 31-05-2007 à 12:09:31  profilanswer
 

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
n°1568895
Sve@r
Posté le 02-06-2007 à 05:55:32  profilanswer
 

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.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Problème avec le contenu d'un fichier

 

Sujets relatifs
enregistrement d'un nouveau fichier dans le repertoire d'origine ?[Résolu] Problème avec Firefox
Probleme centrage site sous differentes résolutionsProblème débutant
Enregistrer et lire un fichier txtEquation de la chaleur en 2D. Problème avec mon logiciel.
[PHP][ORACLE] Problème de requête SQL[RESOLU] FPDF probleme mise en page tableau
Problème de compilo en ligne de commande : run-time error R6009probleme enregistrement
Plus de sujets relatifs à : Problème avec le contenu d'un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR