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   -
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
A voir également:

4 réponses

tatou_38 Messages postés 1937 Date d'inscription   Statut Membre Dernière intervention   121
 
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 !
0
SIM54 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
J'aurais espérer un peu de code C, mais c'est pas grave et encore merci pour l'astuce !
0
vignemail1 Messages postés 1246 Date d'inscription   Statut Contributeur Dernière intervention   259
 
Bon, je t'ai fais rapidement un lecteur de fichier qui contient des lignes du style clé=valeur
#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.
0
SIM54 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Merci encore de l'aide!
0