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 :
à la place de :03-2009-29381_15:17
Je suppose que c'est un problème d'indice et que je sors de mes tableaux, mais je ne vois pas trop pourquoi...10-03-2009_08:15
Code constantes : Sélectionner tout - Visualiser dans une fenêtre à part
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 calcul des dates : Sélectionner tout - Visualiser dans une fenêtre à part
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 écriture dans un fichier texte : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager