Fonction pour charger des données
Résolu
SIM54
Messages postés
3
Statut
Membre
-
SIM54 Messages postés 3 Statut Membre -
SIM54 Messages postés 3 Statut Membre -
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.