Fonction pour charger des données

Résolu/Fermé
SIM54 Messages postés 3 Date d'inscription dimanche 13 avril 2008 Statut Membre Dernière intervention 13 avril 2008 - 13 avril 2008 à 08:27
SIM54 Messages postés 3 Date d'inscription dimanche 13 avril 2008 Statut Membre Dernière intervention 13 avril 2008 - 13 avril 2008 à 11:26
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 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 120
13 avril 2008 à 09:25
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 dimanche 13 avril 2008 Statut Membre Dernière intervention 13 avril 2008
13 avril 2008 à 09:42
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 vendredi 8 octobre 2004 Statut Contributeur Dernière intervention 13 septembre 2019 259
13 avril 2008 à 10:41
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 dimanche 13 avril 2008 Statut Membre Dernière intervention 13 avril 2008
13 avril 2008 à 11:26
Merci encore de l'aide!
0