probleme à l'ecriture dans un fichier
Bonjour,
Désolé de vous embêter encore avec une question un peu bête, mais voilà mon problème j'ai écris un code qui récupère la date et heure GMT d'exécution du programme, arrondi les minutes à la quinzaine inférieure, et retire un certains nombre de fois 15 minutes à cette date.
Ensuite j'écris ces dates dans un fichier texte, si j'écris les dates dans l'ordre dans lequel elle sont stockées, c.a.d de la plus jeune à la plus vieille, ça fonctionne. MaisNBWIN si j'essaye de les ecrire dans l'autre sens : de la plus vieille à la plus récente la première ligne (donc normalement la dernière stockée) est corrompue et j'obtiens ce genre de chose :
Citation:
03-2009-29381_15:17
à la place de :
Citation:
10-03-2009_08:15
Je suppose que c'est un problème d'indice et que je sors de mes tableaux, mais je ne vois pas trop pourquoi...
Code:
1 2 3 4 5 6
|
#define TEMP_PATH3 "/home/flaherty/testgnuplot/date.txt"
#define TEMP_PATH4 "/home/flaherty/testgnuplot/date2.txt"
#define PIXWIN 25 //taille en pixel de la fenêtre (volserie)
#define NBWIN 672 //nombre de fenêtre d'observation (une par 15 minutes) soit ici 7 jours |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
| ]int i=0;
time_t ts;
struct tm *tb;
struct date
{ int heure[NBWIN];
int minute[NBWIN];
int jour[NBWIN];
int mois[NBWIN];
int annee[NBWIN];
};
struct date datefin;
time (&ts);
tb = gmtime(&ts);
if(tb->tm_min<15){
tb->tm_min=0;
}
else if ((tb->tm_min >= 15) && (tb->tm_min<30)){
tb->tm_min=15;
}
else if ((tb->tm_min >=30) && (tb->tm_min<45)){
tb->tm_min=30;
}
else if (tb->tm_min>45){
tb->tm_min=45;
}
tb->tm_year=tb->tm_year+1900;
//initialisation
datefin.minute[0]=tb->tm_min;
datefin.heure[0]=tb->tm_hour;
datefin.jour[0]=tb->tm_mday;
datefin.mois[0]=tb->tm_mon;
datefin.annee[0]=tb->tm_year;
//boucle de calcul
for(i=1;i<NBWIN;i++)
{
switch (datefin.minute[i-1])
{
case 0 :
datefin.minute[i]=45;
datefin.heure[i]=datefin.heure[i-1]-1;
datefin.jour[i]=datefin.jour[i-1];
datefin.mois[i]=datefin.mois[i-1];
datefin.annee[i]=datefin.annee[i-1];
if (datefin.heure[i]==-1)
{
datefin.heure[i]=23;
datefin.jour[i]=datefin.jour[i-1]-1;
datefin.mois[i]=datefin.mois[i-1];
datefin.annee[i]=datefin.annee[i-1];
switch (datefin.mois[i-1])
{
case 3:
if(datefin.annee[i-1]%4==0 && datefin.jour[i-1]==0)
{
datefin.jour[i]=29;
datefin.mois[i]=datefin.mois[i-1]-1;
datefin.annee[i]=datefin.annee[i-1];
}
else if(datefin.annee[i-1]%4!=0 && datefin.jour[i-1]==0)
{
datefin.jour[i]=28;
datefin.mois[i]=datefin.mois[i-1]-1;
datefin.annee[i]=datefin.annee[i-1];
}
break;
case 1:
if(datefin.jour[i-1]==0)
{
datefin.jour[i]=31;
datefin.mois[i]=12;
datefin.annee[i]=datefin.annee[i-1]-1;
}
break;
default:
if((datefin.mois[i-1]==5 || datefin.mois[i-1]==7 || datefin.mois[i-1]==8 || datefin.mois[i-1]==10 ||datefin.mois[i-1]==12) && (datefin.jour[i-1]==0))
{
datefin.jour[i]=30;
datefin.mois[i]=datefin.mois[i-1]-1;
datefin.annee[i]=datefin.annee[i-1];
}
else if ((datefin.mois[i-1]==4 ||datefin.mois[i-1]==6 ||datefin.mois[i-1]==9 || datefin.mois[i-1]==11) && (datefin.jour[i-1]==0))
{
datefin.jour[i]=31;
datefin.mois[i]=datefin.mois[i-1]-1;
datefin.annee[i]=datefin.annee[i-1];
}
break;
}
}
break;
default :
datefin.minute[i]=datefin.minute[i-1]-15;
datefin.heure[i]=datefin.heure[i-1];
datefin.jour[i]=datefin.jour[i-1];
datefin.mois[i]=datefin.mois[i-1];
datefin.annee[i]=datefin.annee[i-1];
}
} |
Code:
1 2 3 4 5 6 7 8 9
|
FILE * fid2=fopen(TEMP_PATH3,"w");
for(i=0;i<NBWIN;i++)fprintf(fid2,"%02d-%02d-%d_%02d:%02d\n",datefin.jour[i],datefin.mois[i],datefin.annee[i],datefin.heure[i],datefin.minute[i]);
fclose(fid2);
FILE * fid3=fopen(TEMP_PATH4,"w");
for(i=0;i<NBWIN;i++)fprintf(fid3,"%02d-%02d-%d_%02d:%02d\n",datefin.jour[NBWIN-i],datefin.mois[NBWIN-i],datefin.annee[NBWIN-i],datefin.heure[NBWIN-i],datefin.minute[NBWIN-i]);
fclose(fid3);
} |
Voilà, j'espère que vous pourrez m'aider, merci
Flaherty