Fonction pour charger des données
Résolu
SIM54
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
SIM54 Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
SIM54 Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Bonjour, j'ai réussit il y a quelque temps à construire une petite fonction de sauvegarde, mais je n'arrive pas à faire le contraire, c'est à dire, à extraire des données d'un fichier pour les intégrés au programme lorsque il fonctionne.
Voila à quoi ressemble la fonction de sauvegarde de base :
void save (void)
{
FILE *fpw,*fpr;
char filename[64];
printf ("ENTER LE NOM DU FICHIER : ");
fgets(filename,sizeof filename,stdin);
search(filename);
fpw = fopen(filename,"a");
fpr = fopen(filename,"a+");
if(!fpw)
{
fprintf(stderr,"IMPOSSIBLE D'EFFECTUER LA SAUVEGARDE AVEC [%s]\n",filename);
return;
}
if(!fpr)
{
fprintf(stderr,"IMPOSSIBLE D'EFFECTUER LA SAUVEGARDE AVEC [%s]\n",filename);
return;
}
else
{
fprintf(fpw,"%s", buffer);
fclose(fpw);
fclose(fpr);
printf ("OK. \n");
}
}
Merci d'avance pour votre aide
Voila à quoi ressemble la fonction de sauvegarde de base :
void save (void)
{
FILE *fpw,*fpr;
char filename[64];
printf ("ENTER LE NOM DU FICHIER : ");
fgets(filename,sizeof filename,stdin);
search(filename);
fpw = fopen(filename,"a");
fpr = fopen(filename,"a+");
if(!fpw)
{
fprintf(stderr,"IMPOSSIBLE D'EFFECTUER LA SAUVEGARDE AVEC [%s]\n",filename);
return;
}
if(!fpr)
{
fprintf(stderr,"IMPOSSIBLE D'EFFECTUER LA SAUVEGARDE AVEC [%s]\n",filename);
return;
}
else
{
fprintf(fpw,"%s", buffer);
fclose(fpw);
fclose(fpr);
printf ("OK. \n");
}
}
Merci d'avance pour votre aide
A voir également:
- Fonction pour charger des données
- Fuite données maif - Guide
- Fonction si et - Guide
- Trier des données excel - Guide
- Sauvegarde des données - Guide
- Supprimer les données de navigation - Guide
4 réponses
Si ce code est ton programme de sauvegarde, tu as de quoi t'inquiéter car tes sauvegardes ne doivent pas contenir grand chose !
==> Tu ne lis aucunes données dans le fichier ouvert en lecture ( au passage : "r+t")
==> Tu écris une seule ligne, issue de buffer
Pour la restauration, il faut faire la même chose, en sens inverse !
==> Tu ne lis aucunes données dans le fichier ouvert en lecture ( au passage : "r+t")
==> Tu écris une seule ligne, issue de buffer
Pour la restauration, il faut faire la même chose, en sens inverse !
Bon, je t'ai fais rapidement un lecteur de fichier qui contient des lignes du style clé=valeur
en espérant que cela t'aide, j'ai utilisé une liste chainée pour le fun.
Je n'ai pas vraiment testé, c'est un code purement théorique mais le principe est bon.
#include <string.h> #include <stdio.h> #include <stdlib.h> typedef struct Couple{ char *key; char *value; struct Couple *next; }Couple; int readFile(char* filename, Couple **tableau){ FILE *fpr; char ligne[512]; char *key; char *value; Couple* element, **debut; char *c; debut = (Couple**)malloc(sizeof(Couple*)); fpr = fopen(filename,"r"); if(!fpr) { fprintf(stderr,"impossible de lire [%s]\n",strdup(filename)); return 2; } while(!feof(fpr)){ fgets(ligne, sizeof(ligne), fpr); /* on gère ainsi les lignes vides de séparation au besoin */ if (strlen(ligne)>1){ /* On récup. les données de la forme key=value stocké par couple ligne par ligne */ key = strtok(ligne, "="); value = strtok(NULL, "\r\n\0"); if (key != NULL && value != NULL){ /* on défile la liste chainée jusqu'à la fin */ while( ((*tableau) != NULL) && ((*tableau)->next != NULL) ){ *tableau = (*tableau)->next; } /* On crée un nouveau couple */ element = (Couple*)malloc(sizeof(Couple)); /* on y associe les valeurs trouvées */ element->key = strdup(key); element->value = strdup(value); /* on ajoute l'element */ if (*tableau == NULL){ *tableau = element; *debut = element; }else{ (*tableau)->next = element; } /* On déplace le pointeur du tableau sur le nouvel element */ *tableau = element; } } } fclose(fpr); /* on récup. le début du tableau avant de sortir */ *tableau = *debut; return 1; } int main(int argc, char **argv){ Couple *tableau = NULL; if (!readFile(argv[1], &tableau)){ printf("Lecture incorrecte\n"); return 1; } printf("Lecture correcte\n"); if (tableau == NULL){ printf("Tableau de taille nulle\n"); } while (tableau != NULL){ printf("Clé=%s \t valeur=%s\n", (tableau)->key, (tableau)->value); tableau = tableau->next; } return 0; }
en espérant que cela t'aide, j'ai utilisé une liste chainée pour le fun.
Je n'ai pas vraiment testé, c'est un code purement théorique mais le principe est bon.