IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

probleme à l'ecriture dans un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Flaherty Mc Coillean
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Par défaut 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 :
    03-2009-29381_15:17
    à la place de :
    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 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

  2. #2
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Bonjour

    Ce ne serait pas plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FILE * fid3=fopen(TEMP_PATH4,"w");
    for(i=NBWIN-1;i<=0;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);
    ?

  3. #3
    Membre confirmé Avatar de Flaherty Mc Coillean
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Par défaut
    Oui ça fonctionne avec ta solution, mais le problème c'est que je dois ecrire en même temps d'autre donnée sur la même ligne et qui ne sont pas dans le même sens que les dates... (plus vielles au début et plus jeunes à la fin).

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par jowo Voir le message
    Bonjour

    Ce ne serait pas plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FILE * fid3=fopen(TEMP_PATH4,"w");
    for(i=NBWIN-1;i<=0;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);
    ?
    Attention, là on mélange deux choses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(i=NBWIN-1;i>=0;i--)
        printf("%d ",NBWIN-i);
    Donne -NBWIN à 15-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
    Pour faire un compte à rebours : au choix :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(i=NBWIN-1;i>=0;i--)
        printf("%d ",i);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(i=1;i<=NBWIN;i++)
        printf("%d ", NBWIN - i);

  5. #5
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Honte à moi, je ne n'avais bien lu le code... Merci mabu

  6. #6
    Membre confirmé Avatar de Flaherty Mc Coillean
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Par défaut
    ok merci beaucoup ça fonctionne, comme je pensais c'était juste un problème d'indice...

    fallait mettre ça :
    et non cela :

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'écriture dans un fichier
    Par Ceris dans le forum Assembleur
    Réponses: 2
    Dernier message: 22/05/2006, 23h30
  2. Problème d'écriture dans un fichier de log
    Par yakotey dans le forum Administration système
    Réponses: 14
    Dernier message: 22/11/2005, 15h08
  3. [C#] Probleme d'écriture dans un fichier XML
    Par Joad dans le forum ASP.NET
    Réponses: 5
    Dernier message: 02/05/2005, 16h19
  4. probleme d'ecriture dans un fichier texte
    Par azrael88370 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/01/2005, 17h33
  5. Probleme d'ecriture dans un fichier en mode Text
    Par bbozet dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/01/2004, 13h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo