Charger le contenu d'un fichier dans un tableaux

Charger le contenu d'un fichier dans un tableaux - C - Programmation

Marsh Posté le 08-01-2012 à 11:55:01    

Bonjour,
J'aurais besoin d'aide pour un programme, j'aimerais écrire une fonction qui permet de charger le contenu d'un fichier, donc de photos dans un tableau. J'ai commencé mais je bloque sur la copie dans le tableau. Merci de votre réponse.
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NMAX 40
 
typedef struct s_date
{
       int jour;
       int mois;
       int annee;
} date;
 
typedef struct s_photo
{
       char nom[NMAX];
       char repertoire [NMAX];
       date  dat;
       char clefs [NMAX];  
       int note;
} photo;
 
void saisie (char name[])
{
     int i;
     photo p;
     FILE *f;
     f=fopen (name,"w" );
     if (f!=NULL) {
                  fclose (f);
                  f=fopen(name,"a" );
                  }
     i=0;
     while (!i)
     {
           printf ("Voulez vous saisir une photo ?" );
           scanf ("%d",&i);
           if (i!=0) {
                     printf("Entrez nom :\n" );
                     scanf("%s",p.nom);
                     printf("Entrez repertoire :\n" );
                     scanf("%s",p.repertoire);
                     printf("Entrez jour :\n" );
                     scanf("%d",&p.dat.jour);
                     printf("Entrez mois :\n" );
                     scanf("%d",&p.dat.mois);
                     printf("Entrez nom :\n" );
                     scanf("%d",&p.dat.annee);
                     printf("Entrez mots clefs :\n" );
                     scanf("%s",p.clefs);
                     printf("Entrez note :\n" );
                     scanf("%d",p.note);
                     fprintf(f,"%s\n%s\n%d/%d/%d\n%s\n%d\n",p.nom,p.repertoire,p.dat.jour,p.dat.mois,p.dat.annee,p.clefs,p.note);
                     }
     }
     fclose (f);
}                
 
void chargement (char name[])
{
     FILE *f;
     char *tab;
     photo p;
     tab=(char*)malloc(sizeof(char));
     fopen(name,"r" );
     if(f==NULL) exit (-1);
     while (!feof(f))
     {
           fread (&p,sizeof (photo),1,f);
           strcpy(tab,t);
           tab++;
     }
fclose (f);
}

Reply

Marsh Posté le 08-01-2012 à 11:55:01   

Reply

Marsh Posté le 08-01-2012 à 13:15:45    

Bonjour,
Si tu écris chaque champ de la structure dans le fichier en mode texte (via fprintf), il faut que tu lises chaque champ de la structure en mode texte (via fscanf ou fgets) et pas en mode binaire via fread!
(ou alors tu enregistre ta structure en mode binaire via fwrite)


---------------
Seul Google le sait...
Reply

Marsh Posté le 08-01-2012 à 13:27:36    

Merci pour ta réponse,
J'ai modifié mon programme mais cela ne marche pas.
 
void chargement (char name[])
{
     FILE *f;
     photo *tab;
     photo p;
     tab=(photo*)malloc(sizeof(photo));
     fopen(name,"r" );
     if(f==NULL) exit (-1);
     while (!feof(f))
     {
           fscanf (f,"%s\n%s\n%d%d%d\n%s\n%d\n",tab.nom,tab.repertoire,tab.dat.jour,tab.dat.mois,tab.dat.annee,tab.clefs,tab.note);
           tab++;
     }
}

Reply

Marsh Posté le 08-01-2012 à 14:46:20    

De toute façon un programme ca ne marche pas: ca n'as pas de pied...
Que dit ton compilateur?


---------------
Seul Google le sait...
Reply

Marsh Posté le 08-01-2012 à 15:06:37    

jmyk,
Déjà à la base, quel format ont les fichiers que tu veux lire?
Parce que ouvrir au petit bonheur la chance des fichiers en espérant y trouver les infos dont on a besoin, dans le bon ordre, et le bon ordonnancement des octets (et rien d'autre, en particulier pas d'image, vu le test d’arrêt de boucle), c'est vivre dans le monde des bisounours, hein.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 08-01-2012 à 16:41:48    

Mon fichier est un fichier texte. Ce que je veux faire c'est affecter des blocs contenant des informations sur des photos dans un tableau.

Reply

Marsh Posté le 08-01-2012 à 17:44:35    

OK! ça pourrait marcher, sauf que la:
tab=(photo*)malloc(sizeof(photo));  
Tu n'as pas alloué autre chose qu'un tableau à un élément, donc ton tab++ risque fort de partir dans l'hyper-espace.
Soit tu alloues un tableau avec une taille de base + des réallocations si nécessaire, soit tu gères une liste chaînée, si tu veux quelque chose qui marche.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

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