J'ai cree deux fonctions qui me permettent de charger et d'enregistrer dans un fichier selon l'ecriture dans le fichier de la maniere suivante :
jour mois ¤(null)¤(null)¤(null)¤null()¤null()¤null()...
...
J'ai cree une fonction qui doit me servir dans un programme mais que j'ai simplifier qui s'appelle 'saisie()'
Cette fonction est cense charge le jour et le mois (qui sont des int) et les 12 enregistrements separes par des '¤', et mettre ces 12 enregistrements dans un tableau *Info[12].
J'ai cree un programme pour tester cela.
vous pouvez trouvez en dessous un copier/coller de mon programme test.
Mon programme propose deux choix :
-le premier utilise la fonction saisie() pour charger un fichier, modifier un enregistrement(ici le 1er, c'est a dire Info[0]) et enregistrer le nouveau contenu dans le fichier.
-le second utilise directement les fonctions charger et enregistrer en modifiant le premier enregistrement en faisant une saisie avec un gets(Info[0]);
Probleme:
Seulement voila,
-pour le premier choix il n'arrive a rien faire.
-Pour le second il charge pas ce qu'il faut. Par contre, il enregistre bien ce qu'on a saisie avec gets(Info[0]);

j'ai nomme le fichier "essai.txt".
vous pouvez trouvez en dessous un copier/coller de mon programme test. Il fonctionne sous dev-c++ et Turbo C++. Il faut juste changer conio.h en conio.c pour dev-C++.
J'espere que j'ai ete assez clair et que quelqu'un pourra m'aider.
Merci d'avance.

voici un exemple de ce que doit contenir le fichier essai.txt:
20 3Ïenregistrement nø1Ï(null)Ï(null)Ï(null)Ï(null)Ï(null)Ï(null)Ï(null)Ï(null)Ï(null)Ï(null)Ï(null)
2 1Ïon est le 2 janvierÏ(null)Ï(null)Ï(null)Ï(null)Ï(null)Ï(null)Ï(null)Ï(null)Ï(null)Ï(null)Ï(null)Ï(null)
1 4ÏcoucouÏ(null)Ï(null)Ï(null)Ï(null)Ï(null)Ï(null)Ï(null)Ï(null)Ï(null)Ï(null)Ï(null)

VOICI LE CODE :
/************************************************ */
/* */
/* Il faut laisser un enregistrement dans le fichier source*/
/* ex : 1 1 Ï(null)Ï(null)Ï(null)...*12 */
/* */
/*************************************************/
#include <stdio.h>
#include <conio.c> //conio.c pour dev-c++
#include <string.h>
#define ENTER 13
#define TAB 9
#define ESC 27 // TOUCHES DU CLAVIER
#define UP 72
#define LEFT 75
#define RIGHT 77
#define DOWN 80
#define RETOUR 8
int Copier_Fichier(char *temporaire, char *destination);
void Charger_Info(int num_jour, int mois, char* Info[12]);
void Enregistrer_Info(int num_jour, int mois, char* Info[12]);
void saisie(int num_jour, int mois)
{
char *saisie="";
int x=64,y=72,i;
int echap=0,cpt=0,num_car=0,nb_car_ligne=0,erreur=0;
char car;
char *Info[12]={0};
int n_jour,n_mois;
char msg[200];
*Info=(char*)malloc(200);
printf("%d,%d\n\n\n",num_jour,mois);
Charger_Info(num_jour,mois,Info);
printf("charge dans la fonction saisie : Info[0]=%s\n",Info[0]);
num_car=strlen(Info[0]);
printf("num_car=%d\n\n",num_car);
printf("Info[0]=%s\n",Info[0]);
num_car=strlen(Info[0]);
printf("num_car=%d\n\n",num_car);
while(cpt!=num_car)
{
saisie[0]=Info[0][cpt];
printf("Info[0][cpt]=%c",Info[0][cpt]);
printf("saisie[0]=%d",saisie[0]);
x+=8;
cpt++;
if(cpt%35==0 || Info[0][cpt]==13)
{
x=64;
y+=8;
cpt++;
}
}
do
{
if(erreur==1)
{
erreur=0;
num_car=strlen(Info[0]);
cpt=0;
x=64;
y=72;
while(cpt!=num_car)
{
saisie[0]=Info[0][cpt];
printf("%c",saisie[0]);
x+=8;
cpt++;
if(cpt%35==0 || Info[0][cpt]==13)
{
x=64;
y+=8;
cpt++;
}
}
}//fin if(erreur)
do
{
saisie[0]=getch();
if(saisie[0]>31 && saisie[0]<127)
{
printf("%c",saisie[0]);
x+=8;
Info[0][num_car]=saisie[0];
num_car++;
}
else
{
switch(saisie[0])
{
case ENTER :
x=64;
y+=8;
Info[0][num_car]=13;
num_car++;
break;
case ESC :
echap=1;
break;
case TAB :x+=32;
if(x>336)
{
x=64;
y+=8;
}
for(i=0;i<4;i++)
{
Info[0][num_car]=32;
num_car++;
}
break;
case RETOUR:
if(x==64 && y==72)
break;
else
{
num_car-=1;
Info[0][num_car]=0;
if(x>64)
x-=8;
else
{
if(y>80)
{
cpt=0;
nb_car_ligne=num_car-1;
do
{
car = Info[0][nb_car_ligne--];
cpt++;
}while(car!=13);
cpt-=1;
x+=(cpt*8);
y-=8;
}
else
{
x+=(num_car*8);
y-=8;
}
}
}
printf("");
break;
default :
do
{
printf("ERREUR!!");
if(kbhit())
{
if(getch()==13)
{
erreur=1;
break;
}
}
}while(1);
break;
}//fin switch()
}//fin else
}while(erreur!=1 && echap==0);
}while(echap==0);
Enregistrer_Info(num_jour,mois,Info);
for(i=0;i<12;i++)
free(Info[i]);
saisie=Info[0];
printf("saisie:%s",saisie);
}
int main(void)
{
int num_jour=20,mois=3;
int i,choix;
char *Info[12]={0};
while(1)
{
clrscr();
printf("faites votre choix(1,2ou3) : \n");
printf("1. en utilisant la fonction saisie\n");
printf("2. en utilisant directement les fonctions\n");
printf("charger et enregistrer dans le fichier\n");
printf("3. quitter");
printf("\n\n");
scanf("%d",&choix);
switch(choix)
{
case 1 :saisie(num_jour,mois);break;
case 2 :
Charger_Info(num_jour,mois,Info);
printf("%s\n",Info[0]);
Info[0]=(char*)malloc(200);
printf("saisir une chaine\n");
fflush(stdin);
gets(Info[0]);
Enregistrer_Info(num_jour,mois,Info);
break;
case 3 :return 0;
default:printf("mauvaise touche!!\n");getch();break;
}
}
}
int Copier_Fichier(char *temporaire, char *destination)
{
FILE *fds, *fdd;
char chaine[200];
fds = fopen(temporaire, "r");
fdd = fopen(destination, "w");
if(!(fds && fdd))
{
printf("erreur d'ouverture\n");
exit(0);
}
rewind(fds);
rewind(fdd);
do
{
fgets(chaine,200,fds);
fprintf(fdd,"%s",chaine);
}while(!feof(fds));
fclose(fds);
fclose(fdd);
return 0;
}
void Charger_Info(int num_jour, int mois, char* Info[12])
{
FILE *fichier,*temp;
int n_jour,n_mois,i,trouve=0,cmp=0;
char msg[200];
char buf[200];
char car;
fichier = fopen("essai.txt", "r");
rewind(fichier);
/* recuperation des donnees pour une date donnee*/
do
{
fgets(buf,200,fichier);
sscanf(buf,"%d %d %[^\n]%s",&n_jour,&n_mois,msg);
if(n_jour==num_jour && n_mois==mois)
{
i=0;
Info[i]=strtok(msg,"Ï");
for(i=1;i<12;i++)
{
Info[i]=strtok(NULL,"Ï");
}
}
}while(!feof(fichier));
for(i=0;i<12;i++)
printf("info[%d]=%s\n",i,Info[i]);
fclose(fichier);
/* fin recuperation des donnees*/
// return (*Info);
}
void Enregistrer_Info(int num_jour, int mois, char* Info[12])
{
FILE *fichier,*temp;
int n_jour,n_mois,i,trouve=0,cmp=0;
char msg[200];
char buf[200];
char car;
char *temporaire;
/*ouverture des fichiers pour faire une mise a jour*/
fichier = fopen("essai.txt", "r");
temporaire = tempnam("\\tmp","wiw");
temp = fopen(temporaire, "w");
rewind(fichier);
rewind(temp);
do
{
fgets(buf,200,fichier);
sscanf(buf,"%d %d %[^\n]%s",&n_jour,&n_mois,msg);
if(n_jour==num_jour && n_mois==mois)
{
fprintf(temp,"%d %d",num_jour,mois);
for(i=0;i<12;i++)
{
Info[i]=strtok(Info[i],"Ï");
fprintf(temp,"Ï%s",Info[i]);
}
trouve=1;
cmp=1;
}
else
{
if(cmp==1)
{
fprintf(temp,"\n");
fprintf(temp,"%s",buf);
cmp=0;
}
else
{
fprintf(temp,"%s",buf);
}
}
}while(!feof(fichier));
if(trouve==0)
{
fprintf(temp,"\n%d %d",num_jour,mois);
for(i=0;i<12;i++)
fprintf(temp,"Ï%s",Info[i]);
}
fclose(fichier);
fclose(temp);
Copier_Fichier(temporaire,"essai.txt");
remove(temporaire);
free(temporaire);
}