Besoin d'aide pour un programme de lecture et d'ecriture de fichier texte [DEBUT

Signaler
Messages postés
12
Date d'inscription
vendredi 23 mai 2008
Statut
Membre
Dernière intervention
13 juin 2008
-
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
-
Bonjour à tous,
Je suis actuellement en stage dans un laboratoire d'essais. Le but de mon stage est d'automatiser la prise de mesures en récupérant les informations des divers capteurs sur un PC. Un système d'acquisition traite les signaux et permet d'enregistrer toutes les valeurs sous un fichier .txt
On me demande maintenant de gerer le depouillement de toutes ces valeurs. Je ne suis pas spécialement calé dans la programmation en C mais j'ai tenté  un début de code. Mon stage se termine dans 3 semaines et j'ai mon rapport personnel à rédiger ainsi que diverses manipulations à faire chaque jour...

Le premier objectif de ce programme est de trier mes valeurs en fonction d'une valeur de consigne de pression située dans chaque ligne de valeur.

Le fichier à l'allure suivante :

Essai: D:\Caract\Data\LIS2008_056
Mesure: Essai0-12(15052008_19h35m48)_F1.raw
Date:16/05/2008 08:23
Nbre de données: 35970
Freq acq (Hz): 11
Date départ: -1/i0/Essa 19hh3m5ms et 199 ms
Temps (s) absolu Temps (s) relatif Banc 3  DAT (°C) Banc 3 Entrée Eau (°C) Banc 3 Sortie Eau (°C) Banc 3 Entrée Huile (°C) Banc 3 Air Sortie réservoir (°C) B81-T6 (°C) Banc 3 - Température ambiante (°C) B81-T8 (°C) AV frottant T9 (°C) AV non frottant T10 (°C) AR  frottant T11 (°C) AR non frottant T12 (°C) AR T13 (°C) AR T14 (°C) AR T15 (°C) B81-T16 (°C) Banc 3 Pression Huile (bar) Banc 3 Pression Air (bar) Banc 3 - Débit Air (m3/h) Banc 3 - Débit. AERZEN (V) Couple Moteur (Nm) Coolant pressure IN (bar) Banc 3- Débit huile (l/min) Coolant pressure OUT (bar) Vitesse Moteur (tr/min) B81-V2 (tr/min) Consigne Vitesse Moteur (tr/min) Consigne Pression Service (bar) B83-VitC (Volts) B84-VitC (Volts) B85-VitC (Volts) B86-VitC (Volts) B87-VitC (Volts) B88-VitC (Volts)
15/05/2008 19h35m47s 0,000000 82,498055 83,120621 84,490273 93,330742 23,509727 1770,000000 22,575876 25,782101 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 3,718013 10,955596 10,697479 1,498833 36,031227 -0,129720 0,022248 -0,106509 496,428192 5,281374 500,000000 12,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 
15/05/2008 19h35m47s 0,095000 82,498055 83,120621 84,490273 93,330742 23,509727 1770,000000 22,575876 25,782101 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 3,682857 10,977570 19,530743 1,490044 36,031227 -0,118280 0,048615 -0,095740 498,871704 5,281374 500,000000 12,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 
15/05/2008 19h35m47s 0,202000 82,498055 83,120621 84,490273 93,330742 23,509727 1770,000000 22,575876 25,782101 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 3,682857 11,131380 8,805341 1,498833 34,726856 -0,129720 0,066194 -0,063432 498,871704 2,837858 500,000000 12,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 

Mon fichier texte est composé de 7 lignes d'en-tête, ensuite chaque valeur est rangée par colonne espacé par une tabulation. La premiere colonne est une date JJ/MM/2008 ensuite un temps relatif en 00h00m00s les autres colonnes sont des chiffres avec 6 décimales.
J'arrive à obtenir toutes les informations de ma ligne (sans utiliser char mais double...) mais il m'est impossible de comparer la fameuse valeur de pression (située dans mon tableau[ba]) dans ma condition, la console passe directement a "else" alors que les valeurs sont de 12 et 8 dans mon fichier de test
Sauriez-vous m'aider et m'expliquer mes erreurs? Meci par avance

Mon code (certainement truffé de fautes) :

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>



int main(int argc, char *argv[])
{
  //Pointeurs pour l'ouverture des fichiers 
  FILE* arrive = NULL;
  FILE* cycle0 = NULL;
  FILE* cycle0ESS = NULL;
  FILE* cycle8 = NULL;
  FILE* cycle10 = NULL;
  FILE* cycle12 = NULL;
 
  char ligne[800]; //tableau en-tête
 
  int a, b, nbdelignes=0;
 
  //tableau des informations par ligne
  double w[2], x[2], y[2], z[2], aa[2], ab[2], ac[2], ad[2], ae[2], af[2], ag[2], ah[2], ai[2], aj[2], ak[2], al[2], am[2], an[2], ao[2], ap[2], aq[2], ar[2], as[2], at[2], au[2], av[2], aw[2], ax[2], ay[2], az[2], ba[2], bb[2], bc[2], bd[2], be[2], bf[2], bg[2], bh[2], bi[2];
 
  //Ouverture du fichier source
  arrive = fopen("resultat.txt","r");
 
  //Création des fichiers finaux
 cycle0 = fopen("Cycle0bar.txt","w");
 cycle0ESS = fopen("Cycle0bar+ESS.txt","w");
 cycle8 = fopen("Cycle8bar.txt","w");
 cycle10 = fopen("Cycle10bar.txt","w");
 cycle12 = fopen("Cycle12bar.txt","w");
 
 printf("Travail en cours...\n");
 
  //Si fichier inexistant
  if(!arrive)
  {
            printf("***Fichier source non trouve!***\n");
            system("PAUSE");                
  }
 
  //On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
  while (fgets(ligne, 800, arrive) != NULL)
  {
           nbdelignes++;//Comptage du nombre de lignes du fichier
  }
 
  fclose(arrive);
  nbdelignes = nbdelignes-7;
 
  //Réouverture du fichier source
  arrive = fopen("resultat.txt","rt");
 
  //Lecture de l'en-tête
  for(b=1; b<=7; b++)
  {
           fgets(ligne, 800, arrive);
  }
 
  //Lecture, valeur après valeur, de chaque ligne
  for(a=0; a<=nbdelignes; a++)
  {
          fscanf(arrive,"%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s"
          , &w[0], &x[0], &y[0], &z[0], &aa[0], &ab[0], &ac[0], &ad[0], &ae[0], &af[0], &ag[0], &ah[0], &ai[0], &aj[0], &ak[0], &al[0], &am[0], &an[0], &ao[0], &ap[0], &aq[0], &ar[0], &as[0], &at[0], &au[0], &av[0], &aw[0], &ax[0], &ay[0], &az[0], &ba[0], &bb[0], &bc[0], &bd[0], &be[0], &bf[0], &bg[0], &bh[0], &bi[0]);
         
         printf("%s", &ba[0]);
         
          if (&ba[0]== 0,000000)
                 {
                            printf("La pression vaut : %s\n", &ba[0]);
                 }
          else if (&ba[0]== 8,000000)
                 {
                            printf("La pression vaut : %s\n", &ba[0]);
                 }
          else if (&ba[0]== 10,000000)
                 {
                            printf("La pression vaut : %s\n", &ba[0]);
                 }    
          else if (&ba[0]== 12,000000)
                 {
                            printf("La pression vaut : %s\n", &ba[0]);
                 }
          else
                 {
                            printf("Erreur de lecture...\n");
                 }                 
                             
                // system("PAUSE");                   



         /* fprintf(cycle0,"%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n"
          , &w[0], &x[0], &y[0], &z[0], &aa[0], &ab[0], &ac[0], &ad[0], &ae[0], &af[0], &ag[0], &ah[0], &ai[0], &aj[0], &ak[0], &al[0], &am[0], &an[0], &ao[0], &ap[0], &aq[0], &ar[0], &as[0], &at[0], &au[0], &av[0], &aw[0], &ax[0], &ay[0], &az[0], &ba[0], &bb[0], &bc[0], &bd[0], &be[0], &bf[0], &bg[0], &bh[0], &bi[0]);*/
  }
 
  printf("%d lignes de valeurs\n", nbdelignes); 
  printf("Le traitement des informations a ete effectue\n");
  system("PAUSE"); 
  return 0;
}



Merci de m'avoir lu!

22 réponses

Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Bonsoir,

Ce programme est plein d'erreurs ! Trop pour détailler. Voici une réécriture rapide qui marche mais qui mériterait des noms de variables significatifs :

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>



int main(int argc,char *argv[])
{
   // --- Pointeurs des fichiers 
   FILE* pFichierResultat  = NULL;
   FILE* pFichierCycle0    = NULL;
   FILE* pFichierCycle0ESS = NULL;
   FILE* pFichierCycle8    = NULL;
   FILE* pFichierCycle10   = NULL;
   FILE* pFichierCycle12   = NULL;
 
   // --- Données lues dans une ligne
   char   szDate[20],szHeure[20];
   double dTempsRelatif;
   double z;
   double aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am;
   double an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az;
   double dPressionConsigne;
   double bb,bc,bd,be,bf,bg;




   // --- Buffer de lecture d'une ligne
   char szBuffer[800];




   // --- Divers
   int i,iCompteurLignes;
 




   // --- Ouvrir le fichier des résultats en lecture
   pFichierResultat = fopen("resultat.txt","r");
   if (pFichierResultat == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER resultat.txt ***\n");
      goto fin_erreur;
   }
 
  
   // --- Ouvrir les fichiers finaux en écriture
   pFichierCycle0 = fopen("Cycle0bar.txt","w");
   if (pFichierCycle0 == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER Cycle0bar.txt ***\n");
      goto fin_erreur;
   }
   pFichierCycle0ESS = fopen("Cycle0bar+ESS.txt","w");
   if (pFichierCycle0ESS == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER Cycle0bar+ESS.txt ***\n");
      goto fin_erreur;
   }
   pFichierCycle8 = fopen("Cycle8bar.txt","w");
   if (pFichierCycle8 == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER Cycle8bar.txt ***\n");
      goto fin_erreur;
   }
   pFichierCycle10 = fopen("Cycle10bar.txt","w");
   if (pFichierCycle10 == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER Cycle10bar.txt ***\n");
      goto fin_erreur;
   }
   pFichierCycle12 = fopen("Cycle12bar.txt","w");
   if (pFichierCycle12 == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER Cycle12bar.txt ***\n");
      goto fin_erreur;
   }
 




   // --- Lire les 7 lignes de l'en-tête du fichier des résultats
   printf("Travail en cours ...\n");
   for (i=0 ; i<7 ; ++i)
   {
      if (fgets(szBuffer,800,pFichierResultat) == NULL)
      {
         printf("*** ERREUR : FIN PREMATUREE DU FICHIER RESULTAT ! ***\n");
         goto fin_erreur;
      }
   }
 




   // --- Lire les lignes de données
   iCompteurLignes = 0;
   while (1)
   {
      // --- Lire une ligne de données
      if (fgets(szBuffer,800,pFichierResultat) == NULL) break;
      ++iCompteurLignes;




      // --- Remplacer les virgules décimales par des points décimaux
      // --- pour pouvoir décoder les nombres réels
      for (i=0 ; i<strlen(szBuffer) ; ++i)
         if (szBuffer[i] == ',') szBuffer[i] = '.';




      // --- Décoder les données
      sscanf(szBuffer
            ,"%s %s %lf"
             " %lf"
             " %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf"
             " %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf"
             " %lf %lf %lf %lf %lf %lf %lf"
            ,szDate,szHeure,&dTempsRelatif
            ,&z
            ,&aa,&ab,&ac,&ad,&ae,&af,&ag,&ah,&ai,&aj,&ak,&al,&am
            ,&an,&ao,&ap,&aq,&ar,&as,&at,&au,&av,&aw,&ax,&ay,&az
            ,&dPressionConsigne,&bb,&bc,&bd,&be,&bf,&bg);




      // --- Tracer les données pour tester
      if (1)
      {
         printf("\nLigne %d :\n",iCompteurLignes);
         printf("Date=%s  Heure=%s  Temps relatif=%lf s\n",szDate,szHeure,dTempsRelatif);
         printf("Pression de consigne lue = %lf\n",dPressionConsigne);
      }




      // --- Vérifier la pression
      if (dPressionConsigne ==  0.)
         printf("La pression vaut : %lf\n",dPressionConsigne);
      else if (dPressionConsigne ==  8.)
         printf("La pression vaut : %lf\n",dPressionConsigne);
      else if (dPressionConsigne == 10.)
         printf("La pression vaut : %lf\n",dPressionConsigne);
      else if (dPressionConsigne == 12.)
         printf("La pression vaut : %lf\n",dPressionConsigne);
      else
         printf("Erreur de lecture ...\n");
                             
      // system("PAUSE");                   




      // --- Ecrire les données dans le fichier "Cycle0dPressionConsigner.txt"
      fprintf(pFichierCycle0
             ,"%s\t%s"
              "\t%lf"
              "\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf"
              "\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf"
              "\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\n"
             ,szDate,szHeure,dTempsRelatif
             ,z
             ,aa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am
             ,an,ao,ap,aq,ar,as,at,au,av,aw,ax,ay,az
             ,dPressionConsigne,bb,bc,bd,be,bf,bg);
  }
  printf("\n%d lignes de donnees\n",iCompteurLignes);
  printf("Le traitement des informations a ete effectue\n");






  // --- Fermer les fichiers
fin_erreur:
  if (pFichierResultat)  fclose(pFichierResultat);
  if (pFichierCycle0)    fclose(pFichierCycle0);
  if (pFichierCycle0ESS) fclose(pFichierCycle0ESS);
  if (pFichierCycle8)    fclose(pFichierCycle8);
  if (pFichierCycle10)   fclose(pFichierCycle10);
  if (pFichierCycle12)   fclose(pFichierCycle12);


  system("PAUSE");
  return 0;
}




Ce qui donne (avec un fichier resultat.txt contenant l'exemple) :

Travail en cours ...Ligne 1 :
Date=15/05/2008  Heure=19h35m47s  Temps relatif=0.000000 s
Pression de consigne lue = 12.000000
La pression vaut : 12.000000

Ligne 2 :
Date=15/05/2008  Heure=19h35m47s  Temps relatif=0.095000 s
Pression de consigne lue = 12.000000
La pression vaut : 12.000000

Ligne 3 :
Date=15/05/2008  Heure=19h35m47s  Temps relatif=0.202000 s
Pression de consigne lue = 12.000000
La pression vaut : 12.000000

3 lignes de donnees
Le traitement des informations a ete effectue
Appuyez sur une touche pour continuer...

Jean-François
Messages postés
12
Date d'inscription
vendredi 23 mai 2008
Statut
Membre
Dernière intervention
13 juin 2008

Merci beaucoup du coup de main, je pars avec une très bonne base pour la suite, ça devrais aller mieux. Franchement merci ! Bonne soirée.
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Bonne continuation alors !

Mais changez les noms de variables sinon ça va être un calvaire à suivre. J'ai dû en supprimer 2 qui ne correspondaient à aucune donnée dans le fichier (bh et bi).

Jean-François
Messages postés
12
Date d'inscription
vendredi 23 mai 2008
Statut
Membre
Dernière intervention
13 juin 2008

C'est ce que je compte faire, je vais les nommer selon la mesure qu'elles realisent. J'ai modifié le code pour trier en fonction des pressions les lignes de mesures. Je vais tenter d'employer la meme technique pour trier les differentezs vitesses moteur et réaliser des moyennes sur chaque colonne par palier de vitesse. Merci encore pour le temps passé à réaliser ce "bon code".
Messages postés
12
Date d'inscription
vendredi 23 mai 2008
Statut
Membre
Dernière intervention
13 juin 2008

Bonsoir à tous!
Je réecris sur mon premier post car j'ai quelques nouveaux soucis...
En effet mon maitre de stage voudrais un programme plus autonome pour gerer l'automatisation des mesures. Il me demande donc de faire un programme qui detecte des paliers (en fonction d'une consigne de vitesse et d'une consigne de pression) en comparant la ligne lue avec la precedente. En m'inspirant du code de jfrançois qui m'a bien aidé, (et je l'en remercie) je bloque. Pour la suite il faudrais que je puisse detecter lla ligne de debut et de fin de mon palier et ce pour chaque palier pour ensuite se placer directement ou je veux dans mon fichier et faire diverses opérations. Je ne vois pas comment stocker ces valeurs sans les ecraser à chaque nouveau tour de boucle...
Voici mon code (désolé je n'ai pas trouver comment l'inserer proprement...) :

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>



int main(int argc,char *argv[])
{
    printf("******************************************************\n"
           "* Programme de traitement des enregistrements LEXART *\n"
           "*                      Banc J3                       *\n"
           "******************************************************\n\n");
   
// --- Pointeurs des fichiers 
   FILE* pFichier1         = NULL;
   FILE* pFichier2TOR      = NULL;
   FILE* pfichiertotal     = NULL;



// --- Données lues dans une ligne du fichier 1.txt
   char   szDate[20],szHeure[20];
   double dTempsRelatif;
   double dat;
   double eauin,eauout,huilein,airreserv,ae,Tamb,ag,ah,ai,aj,ak,al,am;
   double an,ao,Phuile,Pair,Qair,Bby,couple,Peauin,Qhuile,Peauout,Vmoteur,ay,
          ConsigneVmoteur;
   double dPressionConsigne;
   double bb,bc,bd,be,bf,bg;



// --- Données lues dans une ligne du fichier 2TOR.txt
   char   date[20], heure[20];
   double Tempsrelatif;
   double Ess, aa;
  
// --- Buffer de lecture d'une ligne de chaque fichier
   char szBuffer[800];
   char Buffer2[800];
  
// --- Variables diverses
   int i,j,a=0;
   double tabvitesse[2]={0};
   double tabpression[2]={0};
  
// --- Ouvrir le fichier 1.txt en lecture
   pFichier1 = fopen("1.txt","r");
   if (pFichier1 == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER 1.txt ***\n");
      goto fin_erreur;
   }
  
// --- Ouvrir le fichier 2TOR.txt en lecture
   pFichier2TOR = fopen("2TOR.txt","r");
   if (pFichier2TOR == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER 2TOR.txt ***\n");
      goto fin_erreur;
   }     



// --- Ouvrir du fichier final en écriture
   pfichiertotal = fopen("Résultats performances.txt","w");
   if (pfichiertotal == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER Résultats "
             "performances.txt ***\n");
      goto fin_erreur;               
   }
  
// --- Lire les 7 lignes d'en-tête des fichiers résultat et TOR
   for (i=0 ; i<6 ; ++i)
   {
      if (fgets(szBuffer,800,pFichier1) == NULL)
      {
         printf("*** ERREUR : FIN PREMATUREE DU FICHIER RESULTAT ! ***\n");
         goto fin_erreur;
      }
   }
  
   for (j=0; j<6; j++)
   {
       if (fgets(Buffer2,800,pFichier2TOR) == NULL)
      {
         printf("*** ERREUR : FIN PREMATUREE DU FICHIER TOR ! ***\n");
         goto fin_erreur;
      }
   }
  
/* --- DEBUT DE RECHERCHE DES PALIERS VITESSE/PRESSION                        */
  
   printf("Recherche des paliers de vitesse/pression en cours...\n");
             
// --- Décoder les données
while(fgets(szBuffer,800,pFichier1) != NULL
      && fgets(Buffer2,800,pFichier2TOR) != NULL)
      {
             
             
              if(tabvitesse[0]==tabvitesse[1]
                 && tabpression[0]==tabpression[1] || tabvitesse[0]!=tabvitesse[1]
                 && tabpression[0]!=tabpression[1] )
              {
              while(tabvitesse[0]==tabvitesse[1]
                 && tabpression[0]==tabpression[1] || fgets(szBuffer,800,pFichier1) != NULL
      && fgets(Buffer2,800,pFichier2TOR) != NULL)
              {
              fgets(szBuffer,800,pFichier1);
              fgets(Buffer2,800,pFichier2TOR);
             
// --- Remplacer les virgules décimales par des points décimaux
              for (i=0 ; i<strlen(szBuffer) ; ++i)
              if (szBuffer[i] == ',') szBuffer[i] = '.';
              for (j=0 ; j<strlen(Buffer2) ; ++j)
              if (Buffer2[j] == ',') Buffer2[j] = '.';
             
              sscanf(Buffer2
              ,"%s %s %lf"
              " %lf %lf"
              ,date, heure, &Tempsrelatif
              ,&Ess, &aa);



              sscanf(szBuffer
              ,"%s %s %lf"
              " %lf"
              " %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf"
              " %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf"
              " %lf %lf %lf %lf %lf %lf %lf"
              ,szDate,szHeure,&dTempsRelatif
              ,&dat
              ,&eauin,&eauout,&huilein,&airreserv,&ae,&Tamb,&ag,&ah,&ai,&aj,&ak
              ,&al,&am
              ,&an,&ao,&Phuile,&Pair,&Qair,&Bby,&couple,&Peauin,&Qhuile,&Peauout
              ,&Vmoteur,&ay,&ConsigneVmoteur
              ,&dPressionConsigne,&bb,&bc,&bd,&be,&bf,&bg);
              tabvitesse[1] = tabvitesse[0];
              tabpression[1]= tabpression[0];
              printf("1");
              }
              }
             
              while(fgets(szBuffer,800,pFichier1) != NULL
      && fgets(Buffer2,800,pFichier2TOR) != NULL)
              {
              fgets(szBuffer,800,pFichier1);
              fgets(Buffer2,800,pFichier2TOR);
             
// --- Remplacer les virgules décimales par des points décimaux
              for (i=0 ; i<strlen(szBuffer) ; ++i)
              if (szBuffer[i] == ',') szBuffer[i] = '.';
              for (j=0 ; j<strlen(Buffer2) ; ++j)
              if (Buffer2[j] == ',') Buffer2[j] = '.';
             
              sscanf(Buffer2
              ,"%s %s %lf"
              " %lf %lf"
              ,date, heure, &Tempsrelatif
              ,&Ess, &aa);



              sscanf(szBuffer
              ,"%s %s %lf"
              " %lf"
              " %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf"
              " %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf"
              " %lf %lf %lf %lf %lf %lf %lf"
              ,szDate,szHeure,&dTempsRelatif
              ,&dat
              ,&eauin,&eauout,&huilein,&airreserv,&ae,&Tamb,&ag,&ah,&ai,&aj,&ak
              ,&al,&am
              ,&an,&ao,&Phuile,&Pair,&Qair,&Bby,&couple,&Peauin,&Qhuile,&Peauout
              ,&Vmoteur,&ay,&ConsigneVmoteur
              ,&dPressionConsigne,&bb,&bc,&bd,&be,&bf,&bg);
              tabvitesse[1] = tabvitesse[0];
              tabpression[1]= tabpression[0];
              printf("0");
              }
      }                       
fin_erreur :
   if (pFichier1)         fclose(pFichier1);
   if (pFichier2TOR)      fclose(pFichier2TOR);
   if (pfichiertotal)     fclose(pfichiertotal);



   system("PAUSE");
   return 0;
}

Si je suis mal parti dans mon code l'idée est la suivante en tout cas :
On compare une ligne par rapport à sa precedente sur deux critères,
si les critères sont egaux alors on passe à la ligne suivante en faisant le meme test.
Au moment ou on detectera que les valeurs sont differentes alors on note c numéro de ligne qui signifie la fin de mon palier, ensuite on continue la lecture du fichier pour trouver les paliers eventuels suivants.

Merci à ceux qui m'auront lu et tenté de comprendre mon problème!
Bonne nuit
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Bonsoir,

2 petites choses rapides :

1) 6 ou 7 lignes d'entête à lire ?

2) L'opérateur ET (&&) est prioritaire sur l'opérateur OU (||)

if (tabvitesse[0]==tabvitesse[1] 
           && tabpression[0]==tabpression[1] || tabvitesse[0]!=tabvitesse[1] 
           && tabpression[0]!=tabpression[1] )
{
   x
}

Ca donne ça avec un formatage plus clair :

if
(
   tabvitesse[0] == tabvitesse[1]  &&  tabpression[0] == tabpression[1]
   ||
   tabvitesse[0] != tabvitesse[1]  &&  tabpression[0] != tabpression[1]
)
{
   x
}

C'est à dire : si les vitesses et pressions sont égales ou sont différentes alors on fait x.
Et bien c'est pas du tout ce que cela va faire ! Ca va faire :

if
(
   tabvitesse[0] == tabvitesse[1]
   &&
   tabpression[0] == tabpression[1]  ||  tabvitesse[0] != tabvitesse[1]
   &&
   tabpression[0] != tabpression[1]
)
{
   x
}

C'est à dire quelque chose de pas terrible ! Si les vitesses sont égales et (les pression sont égales ou les vitesses différentes) et les pressions sont différentes alors on fait x !!! Il faut écrire :

if
(
   (tabvitesse[0] == tabvitesse[1]  &&  tabpression[0] == tabpression[1])
   ||
   (tabvitesse[0] != tabvitesse[1]  &&  tabpression[0] != tabpression[1])
)
{
   x
}

Et pareil pour le while qui suit.
Jean-François
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Je trouve aussi qu'il y a beaucoup trop de fgets() ! Il y a des tas de lignes qui sont lues sans être traitées. Dans l'extrait ci-dessous on traite une ligne sur 2 (et sans tenir compte de la fin de fichier qui peut survenir sur la seconde lecture) !

while (fgets(szBuffer,800,pFichier1) != NULL       // 1 sur fichier 1
       && fgets(Buffer2,800,pFichier2TOR) != NULL) // 1 sur fichier 2
{
   fgets(szBuffer,800,pFichier1);                  // 2 sur fichier 1
   fgets(Buffer2,800,pFichier2TOR);                // 2 sur fichier 2
   ...

   

Et pareil pour le while qui précède.
Jean-François
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Et d'autre part, les tableaux "tabvitesse" et "tabpression" sont initialisés à zéro au début puis comparés puis décalés MAIS où est-ce qu'ils changent de contenu ? Ils restent à zéro du début jusqu'à la fin !

Jean-François
Messages postés
12
Date d'inscription
vendredi 23 mai 2008
Statut
Membre
Dernière intervention
13 juin 2008

Bonjour,
merci pour votre aide et ves conseils. Pour le moment je n'ai pas encore à faire ce que je veux dans mon code...
Mes consignes tabvitesse et tabpression changent et mon but est de discerner les paliers ou ces deux valeurs sont stables en recupérant la ligne de debut et celle de fin de palier, pour dans une deuxième lecture se placer directement au debut de mes paliers pour traiter les infos. Je sais que le code que j'ai posté ne fait pas cela, mais je vais essayer d'être plus clair dans un prochain message avec un code plus proche de ce que je voudrais faire. 
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Ca serait bien d'avoir le contenu des 2 fichiers utilisés pour faire un petit test ! Avec quelques dizaines de lignes pour être assez significatif.

Jean-François
Messages postés
12
Date d'inscription
vendredi 23 mai 2008
Statut
Membre
Dernière intervention
13 juin 2008

Merci de preter attention à mon souci.
Voici un extrait de chacun des deux fichiers source :
<hr />
Fichier 1.txt : quelques lignes prises au hasard...
<hr />
Essai: D:\Caract\Data\LIS 193-07
Mesure: 0-0ESS-8-10-12(21052008_09h18m01)_F1.raw
Date:21/05/2008 12:46
Nbre de données: 123870
Freq acq (Hz): 10
Date départ: -8/SS/0-0E 09hh1m8ms et 289 ms
Temps (s) absolu Temps (s) relatif Banc 3  DAT (°C) Banc 3 Entrée Eau (°C) Banc 3 Sortie Eau (°C) Banc 3 Entrée Huile (°C) Banc 3 Air Sortie réservoir (°C) B81-T6 (°C) Banc 3 - Température ambiante (°C) B81-T8 (°C) AV frottant T9 (°C) AV non frottant T10 (°C) AR  frottant T11 (°C) AR non frottant T12 (°C) AR T13 (°C) AR T14 (°C) AR T15 (°C) B81-T16 (°C) Banc 3 Pression Huile (bar) Banc 3 Pression Air (bar) Banc 3 - Débit Air (m3/h) Banc 3 - Blow-by (l/min) Couple Moteur (Nm) Coolant pressure IN (bar) Banc 3- Débit huile (l/min) Coolant pressure OUT (bar) Vitesse Moteur (tr/min) B81-V2 (tr/min) Consigne Vitesse Moteur (tr/min) Consigne Pression Service (bar) B83-VitC (Volts) B84-VitC (Volts) B85-VitC (Volts) B86-VitC (Volts) B87-VitC (Volts) B88-VitC (Volts)
21/05/2008 09h17m59s 0,000000 82,622566 74,715950 74,840469 77,922180 21,330740 1770,000000 23,167315 24,007782 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 3,753170 0,121538 28,048651 2,501958 -2,692422 -0,118280 -0,031037 -0,161029 5,281374 0,394342 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 
21/05/2008 09h17m59s 0,097000 82,622566 74,778214 74,840469 77,922180 21,330740 1770,000000 23,167315 24,007782 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 3,753170 0,121538 24,681564 2,501958 -3,127214 -0,129720 -0,013458 -0,139491 5,281374 5,281374 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 
21/05/2008 09h17m59s 0,197000 82,622566 74,778214 74,809341 77,922180 21,330740 1770,000000 23,167315 24,007782 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 3,753170 0,121538 27,417938 2,399309 -3,127214 -0,129720 -0,004669 -0,128721 -2,049175 5,281374 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 
21/05/2008 09h17m59s 0,299000 82,622566 74,778214 74,809341 77,922180 21,330740 1770,000000 23,167315 24,007782 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 3,753170 0,099565 22,474070 2,399309 -2,692422 -0,118280 -0,074983 -0,171799 10,168408 2,837858 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 
21/05/2008 09h52m47s 2088,596000 128,070038 83,649803 85,859924 87,634239 22,762646 1770,000000 22,856031 24,287937 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 3,647700 1,198215 49,653847 1,167522 21,683098 -0,129720 0,022248 -0,095740 2001,634277 5,281374 2000,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 
21/05/2008 09h52m47s 2088,691000 128,070038 83,649803 85,859924 87,634239 22,762646 1770,000000 22,856031 24,287937 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 3,682857 1,088350 45,501652 1,064872 21,683098 -0,118280 -0,057404 -0,161029 2006,521484 0,394342 2000,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 
21/05/2008 09h52m48s 2088,799000 128,070038 83,649803 85,859924 87,634239 22,762646 1770,000000 22,856031 24,287937 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 3,647700 1,198215 48,602657 1,064872 22,117889 -0,129720 0,066194 -0,052662 2001,634277 5,281374 2000,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 
21/05/2008 09h52m48s 2088,893000 128,070038 83,649803 85,859924 87,634239 22,762646 1770,000000 22,856031 24,287937 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 3,647700 1,242161 47,078438 1,064872 22,117889 -0,129720 -0,039826 -0,139491 2016,295532 0,394342 2000,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 
21/05/2008 09h52m48s 2088,988000 128,070038 83,649803 85,859924 87,634239 22,762646 1770,000000 22,856031 24,287937 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 3,682857 1,088350 48,707775 1,064872 22,117889 -0,129720 -0,074983 -0,182568 2011,408447 2,837858 2000,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 
21/05/2008 09h52m48s 2089,096000 128,070038 83,649803 85,859924 87,634239 22,762646 1770,000000 22,856031 24,287937 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 3,647700 1,176242 45,186298 1,064872 22,987474 -0,129720 -0,048615 -0,161029 2021,182495 0,394342 2000,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 
21/05/2008 09h52m48s 2089,188000 128,070038 83,649803 85,859924 87,634239 22,762646 1770,000000 22,856031 24,287937 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 3,647700 1,198215 49,180813 1,064872 21,683098 -0,129720 -0,039826 -0,139491 2001,634277 2,837858 2000,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 
21/05/2008 09h52m48s 2089,319000 128,070038 83,649803 85,859924 87,634239 22,762646 1770,000000 22,856031 24,287937 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 3,647700 1,242161 47,709148 1,064872 22,117889 -0,129720 -0,057404 -0,171799 2021,182495 5,281374 2000,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 
21/05/2008 10h06m55s 2935,950000 86,140076 83,494164 83,120621 92,552528 24,412451 1770,000000 22,793774 24,723736 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 3,682857 0,077592 17,848843 0,859574 5,595798 -0,129720 -0,066194 -0,171799 501,315216 5,281374 500,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 
21/05/2008 10h06m55s 2936,059000 86,140076 83,494164 83,120621 92,583656 24,412451 1770,000000 22,793774 24,723736 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 3,753170 0,121538 12,011465 0,859574 6,030591 -0,129720 -0,057404 -0,150260 496,428192 2,837858 500,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 
21/05/2008 10h06m55s 2936,154000 86,140076 83,494164 83,120621 92,583656 24,412451 1770,000000 22,793774 24,723736 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 3,718013 0,099565 19,057709 0,859574 5,595798 -0,129720 -0,057404 -0,161029 493,984680 0,394342 500,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 
21/05/2008 10h06m55s 2936,254000 86,140076 83,494164 83,120621 92,583656 24,381323 1770,000000 22,793774 24,723736 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 3,753170 0,077592 10,224445 0,859574 5,595798 -0,129720 -0,057404 -0,171799 496,428192 0,394342 500,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 
21/05/2008 10h06m55s 2936,355000 86,140076 83,494164 83,120621 92,583656 24,381323 1770,000000 22,793774 24,723736 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 3,753170 0,143511 18,952589 0,859574 5,595798 -0,129720 -0,066194 -0,171799 496,428192 2,837858 500,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 
21/05/2008 10h06m55s 2936,451000 86,140076 83,494164 83,120621 92,583656 24,381323 1770,000000 22,762646 24,723736 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 3,682857 0,099565 11,275633 0,859574 5,595798 -0,129720 -0,074983 -0,161029 506,202271 2,837858 500,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 
21/05/2008 10h06m55s 2936,561000 86,140076 83,494164 83,120621 92,583656 24,381323 1770,000000 22,762646 24,723736 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 1770,000000 3,682857 0,077592 17,901402 0,859574 5,161007 -0,129720 0,004669 -0,106509 496,428192 5,281374 500,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 
<hr />
Fichier 2TOR.txt des lignes prises aussi au hasard, je n'ouvre mais ne l'exploite pas encore dans le code...
<hr />
Essai: D:\Caract\Data\LIS 193-07
Mesure: 0-0ESS-8-10-12(21052008_09h18m01)_BF1.raw
Date:26/05/2008 11:41
Nbre de données: 123870
Freq acq (Hz): 10
Date départ: -8/SS/0-0E 09hh1m8ms et 289 ms
Temps (s) absolu Temps (s) relatif B81S-Vanne ( )
21/05/2008 09h17m59s 0,000000 0,000000 0,000000 
21/05/2008 09h17m59s 0,097000 0,000000 0,000000 
21/05/2008 09h17m59s 0,197000 0,000000 0,000000 
21/05/2008 09h17m59s 0,299000 0,000000 0,000000 
21/05/2008 09h17m59s 0,396000 0,000000 0,000000 
21/05/2008 09h17m59s 0,493000 0,000000 0,000000 
21/05/2008 09h17m59s 0,618000 0,000000 0,000000 
21/05/2008 09h17m59s 0,695000 0,000000 0,000000 
21/05/2008 10h15m28s 3448,941000 1,000000 0,000000 
21/05/2008 10h15m28s 3449,043000 1,000000 0,000000 
21/05/2008 10h15m28s 3449,135000 1,000000 0,000000 
21/05/2008 10h15m28s 3449,250000 1,000000 0,000000 
21/05/2008 10h15m28s 3449,343000 1,000000 0,000000 
21/05/2008 10h15m28s 3449,439000 1,000000 0,000000 
21/05/2008 10h15m28s 3449,544000 1,000000 0,000000 
21/05/2008 10h15m28s 3449,642000 1,000000 0,000000 
21/05/2008 12h44m49s 12410,364000 0,000000 0,000000 
21/05/2008 12h44m49s 12410,464000 0,000000 0,000000 
21/05/2008 12h44m49s 12410,561000 0,000000 0,000000 
21/05/2008 12h44m49s 12410,671000 0,000000 0,000000 
21/05/2008 12h44m50s 12410,767000 0,000000 0,000000 
21/05/2008 12h44m50s 12410,871000 0,000000 0,000000 
21/05/2008 12h44m50s 12410,965000 0,000000 0,000000 
21/05/2008 12h44m50s 12411,060000 0,000000 0,000000 
<hr />
Messages postés
12
Date d'inscription
vendredi 23 mai 2008
Statut
Membre
Dernière intervention
13 juin 2008

Je viens de terminer un code proche de ce que je veux obtenir au final
Pour le moment j'obtiens des moyennes sur mes paliers. Seulement, d'un point de vue physique, il y a un temps de réponse du systeme vis à vis des températures ou meme des pression et j'aimerais m'affranchir de valeurs erronées qui sont pour le moment comprises dans ma méthide de calcul...
Comment ajouter cette problématique à mon code??


<hr />
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>


int main(int argc,char *argv[])
{
    printf("******************************************************\n"
           "* Programme de traitement des enregistrements LEXART *\n"
           "*                      Banc J3                       *\n"
           "******************************************************\n\n");
   
// --- Pointeurs des fichiers 
   FILE* pFichier1         = NULL;
   FILE* pFichier2TOR      = NULL;
   FILE* pfichiertotal     = NULL;




// --- Données lues dans une ligne du fichier 1.txt
   char   szDate[20],szHeure[20];
   double dTempsRelatif;
   double dat;
   double eauin,eauout,huilein,airreserv,ae,Tamb,ag,ah,ai,aj,ak,al,am;
   double an,ao,Phuile,Pair,Qair,Bby,couple,Peauin,Qhuile,Peauout,Vmoteur,ay,
          ConsigneVmoteur;
   double dPressionConsigne;
   double bb,bc,bd,be,bf,bg;




// --- Données lues dans une ligne du fichier 2TOR.txt
   char   date[20], heure[20];
   double Tempsrelatif;
   double Ess, aa;
  
// --- Buffer de lecture d'une ligne de chaque fichier
   char szBuffer[800];
   char Buffer2[800];
  
// --- Variables diverses
   int i,j,a=0;
   double tabvitesse[2]={0};
   double tabpression[2]={0};
   double tablo[20]={0};
  
// --- Ouvrir le fichier 1.txt en lecture
   pFichier1 = fopen("1.txt","r");
   if (pFichier1 == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER 1.txt ***\n");
      goto fin_erreur;
   }
  
// --- Ouvrir le fichier 2TOR.txt en lecture
   pFichier2TOR = fopen("2TOR.txt","r");
   if (pFichier2TOR == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER 2TOR.txt ***\n");
      goto fin_erreur;
   }     




// --- Ouvrir du fichier final en écriture
   pfichiertotal = fopen("Résultats performances.txt","w");
   if (pfichiertotal == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER Résultats "
             "performances.txt ***\n");
      goto fin_erreur;               
   }
  
// --- Lire les 7 lignes d'en-tête des fichiers résultat et TOR
   for (i=0 ; i<=6 ; ++i)
   {
      if (fgets(szBuffer,800,pFichier1) == NULL)
      {
         printf("*** ERREUR : FIN PREMATUREE DU FICHIER RESULTAT ! ***\n");
         goto fin_erreur;
      }
   }
  
   for (j=0; j<=6; j++)
   {
       if (fgets(Buffer2,800,pFichier2TOR) == NULL)
      {
         printf("*** ERREUR : FIN PREMATUREE DU FICHIER TOR ! ***\n");
         goto fin_erreur;
      }
   }
  
/* --- DEBUT DE RECHERCHE DES PALIERS VITESSE/PRESSION                        */
  
   printf("Recherche des paliers de vitesse/pression en cours...\n");
             
// --- Décoder les données
while(1)
      {
      if(
       fgets(szBuffer,800,pFichier1)!=NULL &&
       fgets(Buffer2,800,pFichier2TOR)!=NULL)
              {
             
// --- Remplacer les virgules décimales par des points décimaux
              for (i=0 ; i<strlen(szBuffer) ; ++i)
              if (szBuffer[i] == ',') szBuffer[i] = '.';
              for (j=0 ; j<strlen(Buffer2) ; ++j)
              if (Buffer2[j] == ',') Buffer2[j] = '.';
             
              sscanf(Buffer2
              ,"%s %s %lf"
              " %lf %lf"
              ,date, heure, &Tempsrelatif
              ,&Ess, &aa);




              sscanf(szBuffer
              ,"%s %s %lf"
              " %lf"
              " %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf"
              " %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf"
              " %lf %lf %lf %lf %lf %lf %lf"
              ,szDate,szHeure,&dTempsRelatif
              ,&dat
              ,&eauin,&eauout,&huilein,&airreserv,&ae,&Tamb,&ag,&ah,&ai,&aj,&ak
              ,&al,&am
              ,&an,&ao,&Phuile,&Pair,&Qair,&Bby,&couple,&Peauin,&Qhuile,&Peauout
              ,&Vmoteur,&ay,&ConsigneVmoteur
              ,&dPressionConsigne,&bb,&bc,&bd,&be,&bf,&bg);   
              tabpression[0] = dPressionConsigne;
              tabvitesse[0]  = ConsigneVmoteur;  
                             
// --- Si les consignes sont les memes qu'avant
              if(tabvitesse[0]==tabvitesse[1]
              && tabpression[0]==tabpression[1])
                 {                       
                 tablo[0] = tablo[0] + dat;
                 tablo[1] = tablo[1] + eauin;
                 tablo[2] = tablo[2] + eauout;
                 tablo[3] = tablo[3] + huilein;
                 tablo[4] = tablo[4] + airreserv;
                 tablo[5] = tablo[5] + Tamb;
                 tablo[6] = tablo[6] + Phuile;
                 tablo[7] = tablo[7] + Pair;
                 tablo[8] = tablo[8] + Qair;
                 tablo[9] = tablo[9] + Bby;
                 tablo[10] = tablo[10] + couple;
                 tablo[11] = tablo[11] + Peauin;
                 tablo[12] = tablo[12] + Qhuile;
                 tablo[13] = tablo[13] + Peauout;
                 tablo[14] = tablo[14] + Vmoteur;
                 tablo[15] = ConsigneVmoteur;
                 tablo[16] = dPressionConsigne;
                 tablo[17] = Ess;
                 a++;
                 }
// --- Si les consignes sont differentes de celles qui precedent
// --- Alors on affiches les moyennes du palier qui precede
              else
                 {  
                     if(a>20)
                     {
                 tablo[0] = tablo[0]/a;
                 tablo[1] = tablo[1]/a;
                 tablo[2] = tablo[2]/a;
                 tablo[3] = tablo[3]/a;
                 tablo[4] = tablo[4]/a;
                 tablo[5] = tablo[5]/a;
                 tablo[6] = tablo[6]/a;
                 tablo[7] = tablo[7]/a;
                 tablo[8] = tablo[8]/a;
                 tablo[9] = tablo[9]/a;
                 tablo[10] = tablo[10]/a;
                 tablo[11] = tablo[11]/a;
                 tablo[12] = tablo[12]/a;
                 tablo[13] = tablo[13]/a;
                 tablo[14] = tablo[14]/a;
                  printf("Vitesse moteur                [Tr/min]: %.2lf\n", tablo[15]);
                  printf("DAT                   [Degres Celsius]: %.2lf\n", tablo[0]);
                  printf("Coolant IN            [Degres Celsius]: %.2lf\n", tablo[1]);
                  printf("Coolant OUT           [Degres Celsius]: %.2lf\n", tablo[2]);
                  printf("Entree d'huile        [Degres Celsius]: %.2lf\n", tablo[3]);
                  printf("Sortie reservoir      [Degres Celsius]: %.2lf\n", tablo[4]);
                  printf("Temperature ambiante  [Degres Celsius]: %.2lf\n", tablo[5]);
                  printf("Pression d'huile                 [Bar]: %.2lf\n", tablo[6]);
                  printf("Contrepression                   [Bar]: %.2lf\n", tablo[16]);
                  printf("Debit air                       [m3/h]: %.2lf\n", tablo[8]);
                  printf("Blow-by                        [L/min]: %.2lf\n", tablo[9]);
                  printf("Couple                           [N.m]: %.2lf\n", tablo[10]);
                  printf("Coolant pressure IN              [Bar]: %.2lf\n", tablo[11]);
                  printf("Debit d'huile                  [L/min]: %.2lf\n", tablo[12]);
                  printf("Coolant pressure OUT             [Bar]: %.2lf\n", tablo[13]);
                  if(Ess==1.)
                  {
                  printf("Mode E.S.S.                           : OUI  \n");
                  }
                  else
                  {
                  printf("Mode E.S.S.                           : NON  \n");
                  }
                  printf("*************************************************\n");
                  system("PAUSE");
                  a=0;
                  }
                  else{
                       a=0;
                      }
                 }
              tabpression[1] = tabpression[0];
              tabvitesse[1]  = tabvitesse[0];
              }
              else if(fgets(szBuffer,800,pFichier1)==NULL ||
              fgets(Buffer2,800,pFichier2TOR)==NULL )break;
             
             
      }                       
fin_erreur :
   if (pFichier1)         fclose(pFichier1);
   if (pFichier2TOR)      fclose(pFichier2TOR);
   if (pfichiertotal)     fclose(pfichiertotal);
   printf("Fin du programme de lecture des paliers\n");
   system("PAUSE");
   return 0;
}
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Ca ne va toujours pas au niveau de la lecture des fichiers ! Voilà une réécriture avec des variables nommées à partir des libellés dans le fichier de données (si vous êtes en C et non en C++, remplacer bool/true/false par BOOL/TRUE/FALSE pour les traces, tout au début) :

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>



int main(void)
{
   printf("******************************************************\n"
          "* Programme de traitement des enregistrements LEXART *\n"
          "*                      Banc J3                       *\n"
          "******************************************************\n\n");




   // --- Traces de mise au point (mettre à "false" pour les supprimer)
   bool bTrace = true;




   // --- Noms des fichiers traités
   const char* szFichierIn1 = "1.txt";
   const char* szFichierIn2 = "2TOR.txt";
   const char* szFichierOut = "Résultats performances.txt";
   
   // --- Pointeurs pour accéder aux fichiers 
   FILE* pFichierIn1 = NULL;
   FILE* pFichierIn2 = NULL;
   FILE* pFichierOut = NULL;
  
   // --- Buffers de lecture/écriture dans les fichiers
   #define TAILLE_BUFFER  800
   char szBuffer1[TAILLE_BUFFER];
   char szBuffer2[TAILLE_BUFFER];
   //char szBufferOut[TAILLE_BUFFER];




   // --- Données d'une ligne du fichier 1 en entrée
   char   szDate1[20],szHeure1[20];
   double dTempsRelatif1;
   double dTempDAT;
   double dTempEauIn,dTempEauOut,dPressionEauIn,dPressionEauOut;
   double dTempHuileIn,dPressionHuile,dDebitHuile;
   double dTempAirReservoir,dPressionAir,dDebitAir;
   double dCoupleMoteur,dVitesseMoteur,dConsigneVitesse;
   double dConsignePression;
   double dTempAmbiante;
   double dBlowBy;
   double dTempB81T6,dTempB81T8,dTempB81T16,dB81V2;
   double dB83VitC,dB84VitC,dB85VitC,dB86VitC,dB87VitC,dB88VitC;
   double dTempAVT9,dTempAVT10;
   double dTempART11,dTempART12,dTempART13,dTempART14,dTempART15;




   // --- Données d'une ligne du fichier 2 en entrée
   char   szDate2[20],szHeure2[20];
   double dTempsRelatif2;
   double dModeESS,daa;
  
   // --- Variables diverses
   int    i,iCompteur;
   double adConsignePression[2] = {0};
   double adConsigneVitesse[2]  = {0};
   double adTablo[20] = {0};
  
  
   // --- Ouvrir le fichier 1 en entrée
   pFichierIn1 = fopen(szFichierIn1,"r");
   if (pFichierIn1 == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER "%s" ***\n",szFichierIn1);
      goto fin_erreur;
   }
  
  
   // --- Ouvrir le fichier 2 en entrée
   pFichierIn2 = fopen(szFichierIn2,"r");
   if (pFichierIn2 == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER "%s" ***\n",szFichierIn2);
      goto fin_erreur;
   }     



  
   // --- Ouvrir le fichier en sortie
   pFichierOut = fopen(szFichierOut,"w");
   if (pFichierOut == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER "%s" ***\n",szFichierOut);
      goto fin_erreur;               
   }
  
  
   // --- Lire les 7 lignes d'en-tête du fichier 1 en entrée
   for (i=0 ; i<7 ; ++i)
   {
      if (fgets(szBuffer1,TAILLE_BUFFER,pFichierIn1) == NULL)
      {
         printf("*** ERREUR : FIN PREMATUREE DU FICHIER "%s" ***\n",szFichierIn1);
         goto fin_erreur;
      }
   }
  
  
   // --- Lire les 7 lignes d'en-tête du fichier 2 en entrée
   for (i=0 ; i<7 ; ++i)
   {
      if (fgets(szBuffer2,TAILLE_BUFFER,pFichierIn2) == NULL)
      {
         printf("*** ERREUR : FIN PREMATUREE DU FICHIER "%s" ***\n",szFichierIn2);
         goto fin_erreur;
      }
   }
  
  
   // --- RECHERCHE DES PALIERS VITESSE/PRESSION
   printf("Recherche des paliers de vitesse/pression en cours...\n");
   iCompteur = 0;
   while (1)
   {
      // --- Lire une ligne dans chaque fichier avec sortie du traitement
      // --- si fin de fichier atteinte sur au moins un des fichiers
      if (fgets(szBuffer1,TAILLE_BUFFER,pFichierIn1) == NULL) break;
      if (fgets(szBuffer2,TAILLE_BUFFER,pFichierIn2) == NULL) break;




      // --- fichier 1 en entrée : lire une ligne, remplacer les virgules
      // --- décimales par des points décimaux et décoder les valeurs
      for (i=0 ; szBuffer1[i] ; ++i) if (szBuffer1[i] == ',') szBuffer1[i] = '.';
      sscanf(szBuffer1
            ,"%s"               // 01 : Date absolue
             " %s"              // 02 : Heure absolue
             " %lf"             // 03 : Temps relatif (s)
             " %lf"             // 04 : DAT (°C)
             " %lf"             // 05 : Entrée Eau (°C)
             " %lf"             // 06 : Sortie Eau (°C)
             " %lf"             // 07 : Entrée Huile (°C)
             " %lf"             // 08 : Air Sortie Réservoir (°C)
             " %lf"             // 09 : B81-T6 (°C)
             " %lf"             // 10 : Température Ambiante (°C)
             " %lf"             // 11 : B81-T8 (°C)
             " %lf"             // 12 : AV frottant T9 (°C)
             " %lf"             // 13 : AV non frottant T10 (°C)
             " %lf"             // 14 : AR frottant T11 (°C)
             " %lf"             // 15 : AR non frottant T12 (°C)
             " %lf"             // 16 : AR T13 (°C)
             " %lf"             // 17 : AR T14 (°C)
             " %lf"             // 18 : AR T15 (°C)
             " %lf"             // 19 : B81-T16 (°C)
             " %lf"             // 20 : Pression Huile (bar)
             " %lf"             // 21 : Pression Air (bar)
             " %lf"             // 22 : Débit Air (m3/h)
             " %lf"             // 23 : Blow-by (V)
             " %lf"             // 24 : Couple Moteur (Nm)
             " %lf"             // 25 : Coolant Pressure IN (bar)
             " %lf"             // 26 : Débit Huile (l/min)
             " %lf"             // 27 : Coolant Pressure OUT (bar)
             " %lf"             // 28 : Vitesse Moteur (tr/min)
             " %lf"             // 29 : B81-V2 (tr/min)
             " %lf"             // 30 : Consigne Vitesse Moteur (tr/min)
             " %lf"             // 31 : Consigne Pression Service (bar)
             " %lf"             // 32 : B83-VitC (Volts)
             " %lf"             // 33 : B84-VitC (Volts)
             " %lf"             // 34 : B85-VitC (Volts)
             " %lf"             // 35 : B86-VitC (Volts)
             " %lf"             // 36 : B87-VitC (Volts)
             " %lf"             // 37 : B88-VitC (Volts)
            // ------------------------
            ,szDate1            // 01 : Date absolue
            ,szHeure1           // 02 : Heure absolue
            ,&dTempsRelatif1    // 03 : Temps relatif (s)
            ,&dTempDAT          // 04 : DAT (°C)
            ,&dTempEauIn        // 05 : Entrée Eau (°C)
            ,&dTempEauOut       // 06 : Sortie Eau (°C)
            ,&dTempHuileIn      // 07 : Entrée Huile (°C)
            ,&dTempAirReservoir // 08 : Air Sortie Réservoir (°C)
            ,&dTempB81T6        // 09 : B81-T6 (°C)
            ,&dTempAmbiante     // 10 : Température Ambiante (°C)
            ,&dTempB81T8        // 11 : B81-T8 (°C)
            ,&dTempAVT9         // 12 : AV frottant T9 (°C)
            ,&dTempAVT10        // 13 : AV non frottant T10 (°C)
            ,&dTempART11        // 14 : AR frottant T11 (°C)
            ,&dTempART12        // 15 : AR non frottant T12 (°C)
            ,&dTempART13        // 16 : AR T13 (°C)
            ,&dTempART14        // 17 : AR T14 (°C)
            ,&dTempART15        // 18 : AR T15 (°C)
            ,&dTempB81T16       // 19 : B81-T16 (°C)
            ,&dPressionHuile    // 20 : Pression Huile (bar)
            ,&dPressionAir      // 21 : Pression Air (bar)
            ,&dDebitAir         // 22 : Débit Air (m3/h)
            ,&dBlowBy           // 23 : Blow-by (V)
            ,&dCoupleMoteur     // 24 : Couple Moteur (Nm)
            ,&dPressionEauIn    // 25 : Coolant Pressure IN (bar)
            ,&dDebitHuile       // 26 : Débit Huile (l/min)
            ,&dPressionEauOut   // 27 : Coolant Pressure OUT (bar)
            ,&dVitesseMoteur    // 28 : Vitesse Moteur (tr/min)
            ,&dB81V2            // 29 : B81-V2 (tr/min)
            ,&dConsigneVitesse  // 30 : Consigne Vitesse Moteur (tr/min)
            ,&dConsignePression // 31 : Consigne Pression Service (bar)
            ,&dB83VitC          // 32 : B83-VitC (Volts)
            ,&dB84VitC          // 33 : B84-VitC (Volts)
            ,&dB85VitC          // 34 : B85-VitC (Volts)
            ,&dB86VitC          // 35 : B86-VitC (Volts)
            ,&dB87VitC          // 36 : B87-VitC (Volts)
            ,&dB88VitC);        // 37 : B88-VitC (Volts)
      if (bTrace)
      {
         printf("F1: %s - %s - TR=%.3lf s - CV=%.2lf tr/mn - CP=%.2lf bar(s)\n"
               ,szDate1,szHeure1,dTempsRelatif1
               ,dConsigneVitesse
               ,dConsignePression);
      }
             
      // --- fichier 2 en entrée : lire une ligne, remplacer les virgules
      // --- décimales par des points décimaux et décoder les valeurs
      for (i=0 ; szBuffer2[i] ; ++i) if (szBuffer2[i] == ',') szBuffer2[i] = '.';
      sscanf(szBuffer2
            ,"%s"            // 01 : Date absolue
             " %s"           // 02 : Heure absolue
             " %lf"          // 03 : Temps relatif (s)
             " %lf"          // 04 : Mode ESS
             " %lf"          // 05 : ???
            // ---------------------
            ,szDate2         // 01 : Date absolue
            ,szHeure2        // 02 : Heure absolue
            ,&dTempsRelatif2 // 03 : Temps relatif (s)
            ,&dModeESS       // 04 : Mode ESS
            ,&daa);          // 05 : ???
      if (bTrace)
      {
         printf("F2: %s - %s - TR=%.3lf s - ESS=%.2lf\n"
               ,szDate2,szHeure2,dTempsRelatif2,dModeESS);
      }




      // --- Pression et vitesse de consigne
      adConsignePression[0] = dConsignePression;
      adConsigneVitesse[0]  = dConsigneVitesse;
      if
      (
         adConsignePression[0] == adConsignePression[1]
         &&
         adConsigneVitesse[0] == adConsigneVitesse[1]
      )
      {
         // --- Consignes identiques
         // --- Cumuler les valeurs pour les moyenner
         if (bTrace) printf("Consignes identiques\n");
         adTablo[ 0] += dTempDAT;
         adTablo[ 1] += dTempEauIn;
         adTablo[ 2] += dTempEauOut;
         adTablo[ 3] += dTempHuileIn;
         adTablo[ 4] += dTempAirReservoir;
         adTablo[ 5] += dTempAmbiante;
         adTablo[ 6] += dPressionHuile;
         adTablo[ 7] += dPressionAir;
         adTablo[ 8] += dDebitAir;
         adTablo[ 9] += dBlowBy;
         adTablo[10] += dCoupleMoteur;
         adTablo[11] += dPressionEauIn;
         adTablo[12] += dDebitHuile;
         adTablo[13] += dPressionEauOut;
         adTablo[14] += dVitesseMoteur;
         adTablo[15] += dConsigneVitesse;
         adTablo[16] += dConsignePression;
         adTablo[17] += dModeESS;
         ++iCompteur;
      }
      else
      {
         // --- Consignes différentes
         // --- Afficher les moyennes du palier qui précède
         if (bTrace) printf("Consignes differentes (cpt=%d)\n",iCompteur);
         if (iCompteur > 20)
         {
            // --- Calculer les moyennes
            for (i=0 ; i<=14 ; ++i) adTablo[i] /= (double)iCompteur;




            // --- Afficher les moyennes
            printf("Vitesse moteur               [Tr/min] : %.2lf\n",adTablo[15]);
            printf("DAT                  [Degres Celsius] : %.2lf\n",adTablo[ 0]);
            printf("Coolant IN           [Degres Celsius] : %.2lf\n",adTablo[ 1]);
            printf("Coolant OUT          [Degres Celsius] : %.2lf\n",adTablo[ 2]);
            printf("Entree d'huile       [Degres Celsius] : %.2lf\n",adTablo[ 3]);
            printf("Sortie reservoir     [Degres Celsius] : %.2lf\n",adTablo[ 4]);
            printf("Temperature ambiante [Degres Celsius] : %.2lf\n",adTablo[ 5]);
            printf("Pression d'huile                [Bar] : %.2lf\n",adTablo[ 6]);
            printf("Contrepression                  [Bar] : %.2lf\n",adTablo[16]);
            printf("Debit air                      [m3/h] : %.2lf\n",adTablo[ 8]);
            printf("Blow-by                       [l/min] : %.2lf\n",adTablo[ 9]);
            printf("Couple                          [N.m] : %.2lf\n",adTablo[10]);
            printf("Coolant pressure IN             [Bar] : %.2lf\n",adTablo[11]);
            printf("Debit d'huile                 [l/min] : %.2lf\n",adTablo[12]);
            printf("Coolant pressure OUT            [Bar] : %.2lf\n",adTablo[13]);
            printf("Mode E.S.S.                           : %s\n",dModeESS == 1. ? "OUI" : "NON");
            printf("************************************************\n");
            system("PAUSE");
         }
         iCompteur = 0;
      }




      // --- Décaler pression et vitesse
      adConsignePression[1] = adConsignePression[0];
      adConsigneVitesse[1]  = adConsigneVitesse[0];
   }






   // --- Fermer les fichiers
fin_erreur :
   if (pFichierIn1) fclose(pFichierIn1);
   if (pFichierIn2) fclose(pFichierIn2);
   if (pFichierOut) fclose(pFichierOut);



   printf("Fin du programme de lecture des paliers\n");
   system("PAUSE");
   return 0;
}


Le compteur "iCompteur" ("a" dans le programme précédent) est sorti du if/then/else puisqu'il est remis à zéro dans les 2 cas. Mais sa gestion me paraît bizarre pour calculer la moyenne !



Jean-François
Messages postés
12
Date d'inscription
vendredi 23 mai 2008
Statut
Membre
Dernière intervention
13 juin 2008

Bonjour et merci de ce code bien plus propre!
Pour ce qui est du "icompteur" ça marche tout à fait, j'ai fait le test et je retombe sur la valeur trouvée manuellement.
J'aurais peut être encore une modification à apporter dans le code pour y introduire la gestion d'un compteur à implusions pour calculer avec un autre appareil le débit d'air en m3/h, mais je n'ai pas encore de precisions sur le matériel (meme si le temps me restant pour boucler mon stage a considerablement raccourci...)
Messages postés
12
Date d'inscription
vendredi 23 mai 2008
Statut
Membre
Dernière intervention
13 juin 2008

Bonjour,
J'essaye en vain de modifier votre code pour affiner la detection de paliers, seulement mes tentatives ont toutes été un echec...
Je cherche à ajouter deux autres conditions dans le if
-Si la vitesse moteur est proche de sa consigne (+/-15)
-Si la pression d'air est proche de sa consigne(+/-1,5)
Lorsque j'ai testé mon ajout de code, je recupérais des valeurs erronées de paliers...





<hr />
En attendant j'ai continué sur mon code actuel dans lequel j'arrive à faire ces deux conditions supplémentaires (les moyennes qui suivent gagnent en précision).
J'ai dû remplacer physiquement l'appareil de mesure de débit d'air par un compteur à gaz délivrant des impulsions à chaque 10 litres qu'il voit passer. J'arrive à traiter son information analogique en 0 ou 1 suivant un seuil que j'ai defini, mais je n'arrive pas par la suite à calculer le débit pour chaque palier...
Voici mon code (Helas sur mon ancien code et non le vôtre pourtant bien meilleur...):





<hr />

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int main(int argc,char *argv[])
{
// --- Pointeurs des fichiers 
   FILE* pFichier1         = NULL;
   FILE* pFichier2TOR      = NULL;
   FILE* pfichiertotal     = NULL;
   FILE* pfichierfinal     = NULL;
// --- Données lues dans une ligne du fichier 1.txt
   char   szDate[20],szHeure[20];
   double dTempsRelatif;
   double dat;
   double eauin,eauout,huilein,airreserv,ae,Tamb,ag,ah,ai,aj,ak,al,am;
   double an,ao,Phuile,Pair,QAerzen,Bby,couple,Peauin,Qhuile,Peauout,Vmoteur,ay,
          ConsigneVmoteur,Debitcalc;
   double dPressionConsigne;
   double bb,bc,bd,be,bf,bg; 




// --- Données lues dans une ligne du fichier 2TOR.txt
   char   date[20], heure[20];
   double Tempsrelatif;
   double Ess, aa;
  
// --- Buffer de lecture d'une ligne de chaque fichier
   char szBuffer[800];
   char Buffer2[800];
  
// --- Variables diverses
   int i,j,a=0,b=0,c=10,d=0,e=1000,k=10,z=0,v=0,u=0;
   double tabvitesse[2]={0};
   double tabpression[2]={0};
   double tablo[20]={0};
   int Aerzen[2]={0};
   int Qaerzen2;
   double SaveAerzen[]={0};
   double difftemps;   
printf("******************************************************\n"
           "* Programme de traitement des enregistrements LEXART *\n"
           "*               Banc J3 - Version AERZEN             *\n"
           "******************************************************\n\n");
// --- Ouvrir le fichier 1.txt en lecture
   pFichier1 = fopen("1.txt","r");
   if (pFichier1 == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER 1.txt ***\n");
      goto fin_erreur;
   }
// --- Ouvrir le fichier 2TOR.txt en lecture
   pFichier2TOR = fopen("2TOR.txt","r");
   if (pFichier2TOR == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER 2TOR.txt ***\n");
      goto fin_erreur;
   }     
// --- Ouvrir du fichier impulsions en écriture
   pfichiertotal = fopen("Résultats avec Aerzen.txt","w");
   if (pfichiertotal == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER Résultats "
             "avec Aerzen.txt ***\n");
      goto fin_erreur;               
   }
// --- Ouvrir le fichier de resultats finaux en ecriture
   pfichierfinal = fopen("Resultats performances.xls","w");
   if (pfichierfinal == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER Résultats "
             "performances.xls ***\n");
      goto fin_erreur;               
   }
   fprintf(pfichierfinal,"Cons.V\tCons.P\tDAT\tEau.IN\t"
   "Eau.OUT\tHuile\tT.reserv.\tT.amb.\tP.huile\t"
   "P.air\tBlow-by\tCouple\tP.eau.IN\t"
   "Q.huile\tP.eau.OUT\tV.moteur\tE.S.S.\tQ.air[Aerzen]\n"
   "[Tr/min]\t[Bar]\t[Deg.C]\t[Deg.C]\t"
   "[Deg.C]\t[Deg.C]\t[Deg.C]\t[Deg.C]"
   "\t[Bar]\t"
   "[Bar]\t[L/min]\t[N.m]\t[Bar]\t"
   "[L/min]\t[Bar]\t[Tr/min]\t[Oui|Non]\t[L/min]\n");
// --- Lire les 7 lignes d'en-tête des fichiers résultat et TOR
   for (i=0 ; i<=6 ; ++i)
   {
      if (fgets(szBuffer,800,pFichier1) == NULL)
      {
         printf("*** ERREUR : FIN PREMATUREE DU FICHIER RESULTAT ! ***\n");
         goto fin_erreur;
      }
   }
   for (j=0; j<=6; j++)
   {
       if (fgets(Buffer2,800,pFichier2TOR) == NULL)
      {
         printf("*** ERREUR : FIN PREMATUREE DU FICHIER TOR ! ***\n");
         goto fin_erreur;
      }
   }
// --- Recherche des impulsions AERZEN                                       
   printf("Recherche des impulsions du compteur Aerzen...\n\tAvancement : \n");
   while(1)
      {
      if(
       fgets(szBuffer,800,pFichier1)!=NULL)
              {
// --- Remplacer les virgules décimales par des points décimaux
              for (i=0 ; i<strlen(szBuffer) ; ++i)
              if (szBuffer[i] == ',') szBuffer[i] = '.';
              for (j=0 ; j<strlen(Buffer2) ; ++j)
              if (Buffer2[j] == ',') Buffer2[j] = '.';
// --- Analyser le contenu de chaque ligne et mettre AERZEN en TOR
              sscanf(Buffer2
              ,"%s %s %lf"
              " %lf %lf"
              ,date, heure, &Tempsrelatif
              ,&Ess, &aa);
              sscanf(szBuffer
              ,"%s %s %lf"
              " %lf"
              " %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf"
              " %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf"
              " %lf %lf %lf %lf %lf %lf %lf"
              ,szDate,szHeure,&dTempsRelatif
              ,&dat
              ,&eauin,&eauout,&huilein,&airreserv,&ae,&Tamb,&ag,&ah,&ai,&aj,&ak
              ,&al,&am
,&an,&ao,&Phuile,&Pair,&QAerzen,&Bby,&couple,&Peauin,&Qhuile,&Peauout
              ,&Vmoteur,&ay,&ConsigneVmoteur
              ,&dPressionConsigne,&bb,&bc,&bd,&be,&bf,&bg);   
              if(QAerzen<4.)QAerzen=0;
              else QAerzen=1;
              fprintf(pfichiertotal
              ,"%s\t%s"
              "\t%lf"
"\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf"
"\t%lf\t%lf\t%lf\t%lf\t%lf\t%.0lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf"
              "\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\n"
              ,szDate,szHeure,dTempsRelatif
              ,dat
              ,eauin,eauout,huilein,airreserv,ae,Tamb,ag,ah,ai,aj,ak,al,am
,an,ao,Phuile,Pair,QAerzen,Bby,couple,Peauin,Qhuile,Peauout,Vmoteur,
              ay,ConsigneVmoteur
              ,dPressionConsigne,bb,bc,bd,be,bf,bg);
              d++;
              }
              //Montrer à l'opérateur que le programme fonctionne
              if(e==d)
              {
                      printf("

[file://\\o/
\\o/

]
");
                      e=e+1000;
                      z++;
                      if(k==z)
                      {
                             printf("\n");
                             k=k+10;
                      }
              }
              else if(fgets(szBuffer,800,pFichier1)==NULL ||
              fgets(Buffer2,800,pFichier2TOR)==NULL )break;
      }
      printf("\nRecherche effectuee!\n"
             "Recherche des paliers...\n\tAvancement :\n");
      fclose(pfichiertotal);
// --- Ouvrir du fichier final en lecture
   pfichiertotal = fopen("Résultats avec Aerzen.txt","r");
   if (pfichiertotal == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER Résultats "
             "avec Aerzen.txt ***\n");
      goto fin_erreur;               
   }
// --- Detecter les paliers et calculer les debits correspondants              
// --- Décoder les données
while(1)
      {
      if(
       fgets(szBuffer,800,pfichiertotal)!=NULL &&
       fgets(Buffer2,800,pFichier2TOR)!=NULL)
              {
// --- Analyser le contenu de chaque ligne
              sscanf(Buffer2
              ,"%s %s %lf"
              " %lf %lf"
              ,date, heure, &Tempsrelatif
              ,&Ess, &aa);
              sscanf(szBuffer
              ,"%s %s %lf"
              " %lf"
              " %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf"
              " %lf %lf %lf %lf %d %lf %lf %lf %lf %lf %lf %lf %lf"
              " %lf %lf %lf %lf %lf %lf %lf"
              ,szDate,szHeure,&dTempsRelatif
              ,&dat
              ,&eauin,&eauout,&huilein,&airreserv,&ae,&Tamb,&ag,&ah,&ai,&aj,&ak
              ,&al,&am
,&an,&ao,&Phuile,&Pair,&Qaerzen2,&Bby,&couple,&Peauin,&Qhuile,&Peauout
              ,&Vmoteur,&ay,&ConsigneVmoteur
              ,&dPressionConsigne,&bb,&bc,&bd,&be,&bf,&bg);   
              tabpression[0] = dPressionConsigne;
              tabvitesse[0]  = ConsigneVmoteur; 
              Aerzen[1] = Qaerzen2;
               if(ConsigneVmoteur!=0.)
               {              
// --- Si les consignes sont les memes qu'avant
              if(tabvitesse[0]==tabvitesse[1]
              && tabpression[0]==tabpression[1])
                 {   
                 if((Vmoteur<=(ConsigneVmoteur+15))
                 && (Pair<=(dPressionConsigne+1)))
                 {                   
                 tablo[0] = tablo[0] + dat;
                 tablo[1] = tablo[1] + eauin;
                 tablo[2] = tablo[2] + eauout;
                 tablo[3] = tablo[3] + huilein;
                 tablo[4] = tablo[4] + airreserv;
                 tablo[5] = tablo[5] + Tamb;
                 tablo[6] = tablo[6] + Phuile;
                 tablo[7] = tablo[7] + Pair;
                 tablo[9] = tablo[9] + Bby;
                 tablo[10] = tablo[10] + couple;
                 tablo[11] = tablo[11] + Peauin;
                 tablo[12] = tablo[12] + Qhuile;
                 tablo[13] = tablo[13] + Peauout;
                 tablo[14] = tablo[14] + Vmoteur;
                 tablo[15] = ConsigneVmoteur;
                 tablo[16] = dPressionConsigne;
                 tablo[17] = Ess;
                 if((Aerzen[1]==1 && Aerzen[0]==0))
                 {
                                 if(v==0)
                                 {
                                 SaveAerzen[0]=dTempsRelatif;
                                 v++;
                                 }
                                 else
                                 {
                                 SaveAerzen[1]=dTempsRelatif;
                                 v++;
                                 }
                 }
                 a++;
                 }
                 }
// --- Si les consignes sont differentes, on affiche les moyennes du palier
              else
                 {
                     if(a>20) //Pour s'affranchir des "faux paliers"
                     {
                 tablo[0] = tablo[0]/a;
                 tablo[1] = tablo[1]/a;
                 tablo[2] = tablo[2]/a;
                 tablo[3] = tablo[3]/a;
                 tablo[4] = tablo[4]/a;
                 tablo[5] = tablo[5]/a;
                 tablo[6] = tablo[6]/a;
                 tablo[7] = tablo[7]/a;
                 tablo[9] = tablo[9]/a;
                 tablo[10] = tablo[10]/a;
                 tablo[11] = tablo[11]/a;
                 tablo[12] = tablo[12]/a;
                 tablo[13] = tablo[13]/a;
                 tablo[14] = tablo[14]/a;
                 fprintf(pfichierfinal,"%.0lf\t%.0lf\t%.1lf\t%.1lf\t"
                  "%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t"
                  "%.1lf\t%.1lf\t%.1lf\t%.1lf\t"
                  "%.1lf\t%.1lf\t%.0lf\t"
                  ,tablo[15],tablo[16],tablo[0],tablo[1]
                  ,tablo[2],tablo[3],tablo[4],tablo[5],tablo[6]
                  ,tablo[7],tablo[9],tablo[10],tablo[11]
                  ,tablo[12],tablo[13],tablo[14]);
                  if(tablo[18]==1.)
                  {
                  fprintf(pfichierfinal,"OUI\t");
                  }
                  else
                  {
                  fprintf(pfichierfinal,"NON\t");
                  }
// --- Calcul du débit
                  difftemps = ((SaveAerzen[1]-SaveAerzen[0])/60);
                  v=(v*10);
                  Debitcalc=(v/difftemps);                 
                  fprintf(pfichierfinal,"%.2lf\n",Debitcalc);
                  printf("

[file://\\o/
\\o/

]
");
                  a=0;
                  b++;
                  v=0;
                  if(b==c)
                  {
                          printf("\n");
                          c=c+10;
                  }
                  }
                                 else
                                 {
                                 a=0;
                                 }
                 }
                 }
              tabpression[1] = tabpression[0];
              tabvitesse[1]  = tabvitesse[0];
              tablo[18] = tablo[17];
              Aerzen[0]=Qaerzen2;
              }
              else if(fgets(szBuffer,800,pFichier1)==NULL ||
              fgets(Buffer2,800,pFichier2TOR)==NULL )break;
      }      
      printf("\n\nNombre de paliers detectes : %d"
      "\n\nLes resultats ont ete stockes dans le fichier :\n"
      " \n\tResultats performances.xls" ,b);
      printf("\n\n********************************************************\n"
                 "*        Fin du programme de lecture des paliers       *\n"
      "********************************************************\n\n");         
fin_erreur :
   if (pFichier1)         fclose(pFichier1);
   if (pFichier2TOR)      fclose(pFichier2TOR);
   if (pfichiertotal)     fclose(pfichiertotal);
   if (pfichierfinal)     fclose(pfichierfinal);
   system("PAUSE");
   return 0;
}
<hr />Merci par avance pour votre aide précieuse.Bonne soirée
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Bonjour,

Voila une petite mise en forme avec qq corrections et indications !







#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

int main(void)
{
   // --- Pointeurs des fichiers 
   FILE* pFichier1     = NULL;
   FILE* pFichier2TOR  = NULL;
   FILE* pfichiertotal = NULL;
   FILE* pfichierfinal = NULL;

   // --- Données lues dans une ligne du fichier 1.txt
   char   szDate[20],szHeure[20];
   double dTempsRelatif;
   double dat;
   double eauin,eauout,huilein,airreserv,ae,Tamb,ag,ah,ai,aj,ak,al,am;
   double an,ao,Phuile,Pair,QAerzen,Bby,couple,Peauin,Qhuile,Peauout,Vmoteur,ay,
          ConsigneVmoteur,Debitcalc;
   double dPressionConsigne;
   double bb,bc,bd,be,bf,bg; 








   // --- Données lues dans une ligne du fichier 2TOR.txt
   char   date[20], heure[20];
   double Tempsrelatif;
   double Ess, aa;
  
   // --- Buffer de lecture d'une ligne de chaque fichier
   char szBuffer[800];
   char Buffer2[800];
  
   // --- Variables diverses
   int i,j,a=0,b=0,c=10,d=0,e=1000,k=10,z=0,v=0,u=0;
   double tabvitesse[2]={0};
   double tabpression[2]={0};
   double tablo[20]={0};
   int Aerzen[2]={0};
   int Qaerzen2;
   double SaveAerzen[]={0}; // dimension
   double difftemps;   

   printf("******************************************************\n"
           "* Programme de traitement des enregistrements LEXART *\n"
           "*               Banc J3 - Version AERZEN             *\n"
           "******************************************************\n\n");

   // --- Ouvrir le fichier 1.txt en lecture
   pFichier1 = fopen("1.txt","r");
   if (pFichier1 == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER 1.txt ***\n");
      goto fin_erreur;
   }

   // --- Ouvrir le fichier 2TOR.txt en lecture
   pFichier2TOR = fopen("2TOR.txt","r");
   if (pFichier2TOR == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER 2TOR.txt ***\n");
      goto fin_erreur;
   }     

   // --- Ouvrir du fichier impulsions en écriture
   pfichiertotal = fopen("Résultats avec Aerzen.txt","w");
   if (pfichiertotal == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER Résultats "
             "avec Aerzen.txt ***\n");
      goto fin_erreur;               
   }

   // --- Ouvrir le fichier de resultats finaux en ecriture
   pfichierfinal = fopen("Resultats performances.xls","w");
   if (pfichierfinal == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER Résultats "
             "performances.xls ***\n");
      goto fin_erreur;               
   }
   fprintf(pfichierfinal,"Cons.V\tCons.P\tDAT\tEau.IN\t"
   "Eau.OUT\tHuile\tT.reserv.\tT.amb.\tP.huile\t"
   "P.air\tBlow-by\tCouple\tP.eau.IN\t"
   "Q.huile\tP.eau.OUT\tV.moteur\tE.S.S.\tQ.air[Aerzen]\n"
   "[Tr/min]\t[Bar]\t[Deg.C]\t[Deg.C]\t"
   "[Deg.C]\t[Deg.C]\t[Deg.C]\t[Deg.C]"
   "\t[Bar]\t"
   "[Bar]\t[L/min]\t[N.m]\t[Bar]\t"
   "[L/min]\t[Bar]\t[Tr/min]\t[Oui|Non]\t[L/min]\n");

   // --- Lire les 7 lignes d'en-tête des fichiers résultat et TOR
   for (i=0 ; i<7 ; ++i)
   {
      if (fgets(szBuffer,800,pFichier1) == NULL)
      {
         printf("*** ERREUR : FIN PREMATUREE DU FICHIER RESULTAT ! ***\n");
         goto fin_erreur;
      }
   }
   for (j=0; j<7; j++)
   {
       if (fgets(Buffer2,800,pFichier2TOR) == NULL)
      {
         printf("*** ERREUR : FIN PREMATUREE DU FICHIER TOR ! ***\n");
         goto fin_erreur;
      }
   }

   // --- Recherche des impulsions AERZEN                                       
   printf("Recherche des impulsions du compteur Aerzen...\n\tAvancement : \n");
   while(1)
   {
      if (fgets(szBuffer,800,pFichier1) == NULL) break;
      if (fgets(Buffer2,800,pFichier2TOR) == NULL) break;

      // --- Remplacer les virgules décimales par des points décimaux pour décoder
      for (i=0 ; i<strlen(szBuffer) ; ++i)
         if (szBuffer[i] == ',') szBuffer[i] = '.'; 
      for (j=0 ; j<strlen(Buffer2) ; ++j)
         if (Buffer2[j] == ',') Buffer2[j] = '.';

      // --- Analyser le contenu de chaque ligne et mettre AERZEN en TOR
      sscanf(Buffer2
            ,"%s %s %lf"
             " %lf %lf"
            ,date, heure, &Tempsrelatif
            ,&Ess, &aa);
      sscanf(szBuffer
            ,"%s %s %lf"
             " %lf"
             " %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf"
             " %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf"
             " %lf %lf %lf %lf %lf %lf %lf"
            ,szDate,szHeure,&dTempsRelatif
            ,&dat
            ,&eauin,&eauout,&huilein,&airreserv,&ae,&Tamb,&ag,&ah,&ai,&aj,&ak
            ,&al,&am
            ,&an,&ao,&Phuile,&Pair,&QAerzen,&Bby,&couple,&Peauin,&Qhuile,&Peauout
            ,&Vmoteur,&ay,&ConsigneVmoteur
            ,&dPressionConsigne,&bb,&bc,&bd,&be,&bf,&bg);    
      if (QAerzen < 4.)
         QAerzen = 0;
      else
         QAerzen = 1;
      fprintf(pfichiertotal
             ,"%s\t%s"
              "\t%lf"
              "\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf"
              "\t%lf\t%lf\t%lf\t%lf\t%lf\t%.0lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf"
              "\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\n"
             ,szDate,szHeure,dTempsRelatif
             ,dat
             ,eauin,eauout,huilein,airreserv,ae,Tamb,ag,ah,ai,aj,ak,al,am
             ,an,ao,Phuile,Pair,QAerzen,Bby,couple,Peauin,Qhuile,Peauout,Vmoteur
             ,ay,ConsigneVmoteur
             ,dPressionConsigne,bb,bc,bd,be,bf,bg);
      d++;

      // --- Montrer à l'opérateur que le programme fonctionne
      if (e == d)
      {
         printf("
\\o/
");
               a = 0;
               b++;
               v = 0;
               if (b == c)
               {
                  printf("\n");
                  c += 10;
               }
            }
            else
            {
               a = 0;
            }
         }
      }
      tabpression[1] = tabpression[0];
      tabvitesse[1]  = tabvitesse[0];
      tablo[18] = tablo[17];
      Aerzen[0] = Qaerzen2;
   }       
   printf("\n\nNombre de paliers detectes : %d"
          "\n\nLes resultats ont ete stockes dans le fichier :\n"
          "\n\tResultats performances.xls" ,b);
   printf("\n\n********************************************************\n"
              "*        Fin du programme de lecture des paliers       *\n"
              "********************************************************\n\n");         

fin_erreur :
   if (pFichier1)     fclose(pFichier1);
   if (pFichier2TOR)  fclose(pFichier2TOR);
   if (pfichiertotal) fclose(pfichiertotal);
   if (pfichierfinal) fclose(pfichierfinal);
   system("PAUSE");
   return 0;
}








Jean-François
Messages postés
12
Date d'inscription
vendredi 23 mai 2008
Statut
Membre
Dernière intervention
13 juin 2008

Merci de ces corrections qui m'avaient echappé!Qu'en est-il de la suite du programme, ma manière de faire est-elle adaptée? On sont les erreurs (car il doit y en avoir vu les resultats que j'obtiens...)?
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Il y a eu un problème de copier/coller ! Le programme corrigé n'est pas complet ! Je le reposte bientôt.

Jean-François
Messages postés
12
Date d'inscription
vendredi 23 mai 2008
Statut
Membre
Dernière intervention
13 juin 2008

Merci beaucoup de passer du temps à mon problème. Toutes vos améliorations m'ont permis d'y voir beaucoup plus clair dans la structuration d'un programme en C. Je découvre de nouvelles fonctionalités chaque jour!
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Voila la nouvelle version avec le reformatage complet et quelques corrections. Je ne peux rien dire de l'exécution, les fichiers de test sont bien trop courts. Bons tests  !

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>



int main(void)
{
   // --- Noms des fichiers traités
   const char* szFichierIn1    = "1.txt";
   const char* szFichierIn2    = "2TOR.txt";
   const char* szFichierAERZEN = "Résultats avec Aerzen.txt";
   const char* szFichierPerfo  = "Résultats performances.xls";




   // --- Pointeurs d'accès aux fichiers
   FILE* pFichierIn1    = NULL;
   FILE* pFichierIn2    = NULL;
   FILE* pFichierAERZEN = NULL;
   FILE* pFichierPerfo  = NULL;
  
   // --- Buffer de lecture dans les fichiers
   #define TAILLE_BUFFER  800
   char szBuffer1[TAILLE_BUFFER];
   char szBuffer2[TAILLE_BUFFER];




   // --- Données d'une ligne du fichier 1
   char   szDate1[20],szHeure1[20];
   double dTempsRelatif1;
   double dTempDAT;
   double dTempEauIn,dTempEauOut,dPressionEauIn,dPressionEauOut;
   double dTempHuile,dPressionHuile,dDebitHuile;
   double dTempAirReservoir,dPressionAir,dDebitAir;
   double dCoupleMoteur,dVitesseMoteur,dConsigneVitesse;
   double dConsignePression;
   double dTempAmbiante;
   double dBlowBy;
   double dTempART11,dTempART12,dTempART13,dTempART14,dTempART15;
   double dTempAVT9,dTempAVT10;
   double dTempB81T6,dTempB81T8,dTempB81T16;
   double dVitesseB81V2;
   double dB83VitC,dB84VitC,dB85VitC,dB86VitC,dB87VitC,dB88VitC; 




   // --- Données d'une ligne du fichier 2
   char   szDate2[20],szHeure2[20];
   double dTempsRelatif2;
   double dModeESS,daa;
  
   // --- Variables diverses
   int    i;
   int    iCompteurTempsRelatif = 0;
   int    iCompteurMoyenne = 0;
   int    iCompteurPalier = 0;
   int    iCompteurTraitement = 0;
   int    iCompteurSymbole = 0;
   int    aiAerzen[2] = {0};
   double adConsignePression[2] = {0};
   double adConsigneVitesse[2] = {0};
   double adTablo[20] = {0};
   double adTempsAerzen[2] = {0};
   double dQaerzen2;
   double dDiffTemps;  
   double dDebitCalcule;



  
   // --- Début
   printf("***********************************************************\n"
          "*   Programme de traitement des enregistrements LEXART    *\n"
          "*                 Banc J3 - Version AERZEN                *\n"
          "***********************************************************\n"
          "\n");






   // --- Ouvrir en lecture le fichier 1
   pFichierIn1 = fopen(szFichierIn1,"r");
   if (pFichierIn1 == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER "%s" ***\n",szFichierIn1);
      goto fin_erreur;
   }



  
   // --- Ouvrir en lecture le fichier 2
   pFichierIn2 = fopen(szFichierIn2,"r");
   if (pFichierIn2 == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER "%s" ***\n",szFichierIn2);
      goto fin_erreur;
   }     



  
   // --- Ouvrir en écriture le fichier des impulsions AERZEN
   pFichierAERZEN = fopen(szFichierAERZEN,"w");
   if (pFichierAERZEN == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER "%s" ***\n",szFichierAERZEN);
      goto fin_erreur;               
   }



  
   // --- Ouvrir en écriture le fichier des performances
   pFichierPerfo = fopen(szFichierPerfo,"w");
   if (pFichierPerfo == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER "%s" ***\n",szFichierPerfo);
      goto fin_erreur;               
   }



  
   // --- Ecrire l'entête du fichier des performances
   fprintf(pFichierPerfo
          ,"Cons.V  \tCons.P\tDAT    \tEau.IN \tEau.OUT\tHuile  \tT.reserv."
           "\tT.amb. \tP.huile\tP.air\tBlow-by\tCouple\tP.eau.IN\tQ.huile"
           "\tP.eau.OUT\tV.moteur\tE.S.S.   \tQ.air[Aerzen]\n"
           "[tr/min]\t[bar] \t[Deg.C]\t[Deg.C]\t[Deg.C]\t[Deg.C]\t[Deg.C]  "
           "\t[Deg.C]\t[bar]  \t[bar]\t[l/min]\t[N.m] \t[bar]   \t[l/min]"
           "\t[bar]    \t[tr/min]\t[Oui|Non]\t[l/min]      \n");



  
   // --- Lire les 7 lignes d'entête du fichier 1
   for (i=0 ; i<7 ; ++i)
   {
      if (fgets(szBuffer1,TAILLE_BUFFER,pFichierIn1) == NULL)
      {
         printf("*** ERREUR : FIN PREMATUREE DU FICHIER "%s" ***\n",szFichierIn1);
         goto fin_erreur;
      }
   }



  
   // --- Lire les 7 lignes d'entête du fichier 2
   for (i=0; i<7; ++i)
   {
       if (fgets(szBuffer2,TAILLE_BUFFER,pFichierIn2) == NULL)
      {
         printf("*** ERREUR : FIN PREMATUREE DU FICHIER "%s" ***\n",szFichierIn2);
         goto fin_erreur;
      }
   }



  
   // --- Recherche des impulsions AERZEN                                       
   printf("Recherche des impulsions du compteur Aerzen :\nAvancement : \n");
   while (1)
   {
      // --- Lire une ligne dans chacun des 2 fichiers avec sortie de la boucle
      // --- de traitement si la fin d'au moins un des 2 fichiers est atteinte
      if (fgets(szBuffer1,TAILLE_BUFFER,pFichierIn1) == NULL) break;
      if (fgets(szBuffer2,TAILLE_BUFFER,pFichierIn2) == NULL) break;




      // --- fichier 1 en entrée : Remplacer les virgules décimales
      // --- par des points décimaux et décoder les valeurs
      for (i=0 ; szBuffer1[i] ; ++i) if (szBuffer1[i] == ',') szBuffer1[i] = '.';
      sscanf(szBuffer1
            ,"%s"               // 01 : Date absolue
             " %s"              // 02 : Heure absolue
             " %lf"             // 03 : Temps relatif (s)
             " %lf"             // 04 : DAT (°C)
             " %lf"             // 05 : Entrée Eau (°C)
             " %lf"             // 06 : Sortie Eau (°C)
             " %lf"             // 07 : Entrée Huile (°C)
             " %lf"             // 08 : Air Sortie Réservoir (°C)
             " %lf"             // 09 : B81-T6 (°C)
             " %lf"             // 10 : Température Ambiante (°C)
             " %lf"             // 11 : B81-T8 (°C)
             " %lf"             // 12 : AV frottant T9 (°C)
             " %lf"             // 13 : AV non frottant T10 (°C)
             " %lf"             // 14 : AR frottant T11 (°C)
             " %lf"             // 15 : AR non frottant T12 (°C)
             " %lf"             // 16 : AR T13 (°C)
             " %lf"             // 17 : AR T14 (°C)
             " %lf"             // 18 : AR T15 (°C)
             " %lf"             // 19 : B81-T16 (°C)
             " %lf"             // 20 : Pression Huile (bar)
             " %lf"             // 21 : Pression Air (bar)
             " %lf"             // 22 : Débit Air (m3/h)
             " %lf"             // 23 : Blow-by (V)
             " %lf"             // 24 : Couple Moteur (Nm)
             " %lf"             // 25 : Coolant Pressure IN (bar)
             " %lf"             // 26 : Débit Huile (l/min)
             " %lf"             // 27 : Coolant Pressure OUT (bar)
             " %lf"             // 28 : Vitesse Moteur (tr/min)
             " %lf"             // 29 : B81-V2 (tr/min)
             " %lf"             // 30 : Consigne Vitesse Moteur (tr/min)
             " %lf"             // 31 : Consigne Pression Service (bar)
             " %lf"             // 32 : B83-VitC (Volts)
             " %lf"             // 33 : B84-VitC (Volts)
             " %lf"             // 34 : B85-VitC (Volts)
             " %lf"             // 35 : B86-VitC (Volts)
             " %lf"             // 36 : B87-VitC (Volts)
             " %lf"             // 37 : B88-VitC (Volts)
            // ------------------------
            ,szDate1            // 01 : Date absolue
            ,szHeure1           // 02 : Heure absolue
            ,&dTempsRelatif1    // 03 : Temps relatif (s)
            ,&dTempDAT          // 04 : DAT (°C)
            ,&dTempEauIn        // 05 : Entrée Eau (°C)
            ,&dTempEauOut       // 06 : Sortie Eau (°C)
            ,&dTempHuile        // 07 : Entrée Huile (°C)
            ,&dTempAirReservoir // 08 : Air Sortie Réservoir (°C)
            ,&dTempB81T6        // 09 : B81-T6 (°C)
            ,&dTempAmbiante     // 10 : Température Ambiante (°C)
            ,&dTempB81T8        // 11 : B81-T8 (°C)
            ,&dTempAVT9         // 12 : AV frottant T9 (°C)
            ,&dTempAVT10        // 13 : AV non frottant T10 (°C)
            ,&dTempART11        // 14 : AR frottant T11 (°C)
            ,&dTempART12        // 15 : AR non frottant T12 (°C)
            ,&dTempART13        // 16 : AR T13 (°C)
            ,&dTempART14        // 17 : AR T14 (°C)
            ,&dTempART15        // 18 : AR T15 (°C)
            ,&dTempB81T16       // 19 : B81-T16 (°C)
            ,&dPressionHuile    // 20 : Pression Huile (bar)
            ,&dPressionAir      // 21 : Pression Air (bar)
            ,&dDebitAir         // 22 : Débit Air (m3/h)
            ,&dBlowBy           // 23 : Blow-by (V)
            ,&dCoupleMoteur     // 24 : Couple Moteur (Nm)
            ,&dPressionEauIn    // 25 : Coolant Pressure IN (bar)
            ,&dDebitHuile       // 26 : Débit Huile (l/min)
            ,&dPressionEauOut   // 27 : Coolant Pressure OUT (bar)
            ,&dVitesseMoteur    // 28 : Vitesse Moteur (tr/min)
            ,&dVitesseB81V2     // 29 : B81-V2 (tr/min)
            ,&dConsigneVitesse  // 30 : Consigne Vitesse Moteur (tr/min)
            ,&dConsignePression // 31 : Consigne Pression Service (bar)
            ,&dB83VitC          // 32 : B83-VitC (Volts)
            ,&dB84VitC          // 33 : B84-VitC (Volts)
            ,&dB85VitC          // 34 : B85-VitC (Volts)
            ,&dB86VitC          // 35 : B86-VitC (Volts)
            ,&dB87VitC          // 36 : B87-VitC (Volts)
            ,&dB88VitC);        // 37 : B88-VitC (Volts)




      // --- fichier 2 en entrée : Remplacer les virgules décimales
      // --- par des points décimaux et décoder les valeurs
      for (i=0 ; szBuffer2[i] ; ++i) if (szBuffer2[i] == ',') szBuffer2[i] = '.';
      sscanf(szBuffer2
            ,"%s"            // 01 : Date absolue
             " %s"           // 02 : Heure absolue
             " %lf"          // 03 : Temps relatif (s)
             " %lf"          // 04 : Mode ESS
             " %lf"          // 05 : ???
            // ---------------------
            ,szDate2         // 01 : Date absolue
            ,szHeure2        // 02 : Heure absolue
            ,&dTempsRelatif2 // 03 : Temps relatif (s)
            ,&dModeESS       // 04 : Mode ESS
            ,&daa);          // 05 : ???




      // --- Analyser le contenu de chaque ligne et mettre AERZEN en TOR
      dDebitAir = (dDebitAir < 4.) ? 0. : 1.;
      fprintf(pFichierAERZEN
            ,"%s"              // 01 : Date absolue
             "\t%s"            // 02 : Heure absolue
             "\t%lf"           // 03 : Temps relatif (s)
             "\t%lf"           // 04 : DAT (°C)
             "\t%lf"           // 05 : Entrée Eau (°C)
             "\t%lf"           // 06 : Sortie Eau (°C)
             "\t%lf"           // 07 : Entrée Huile (°C)
             "\t%lf"           // 08 : Air Sortie Réservoir (°C)
             "\t%lf"           // 09 : B81-T6 (°C)
             "\t%lf"           // 10 : Température Ambiante (°C)
             "\t%lf"           // 11 : B81-T8 (°C)
             "\t%lf"           // 12 : AV frottant T9 (°C)
             "\t%lf"           // 13 : AV non frottant T10 (°C)
             "\t%lf"           // 14 : AR frottant T11 (°C)
             "\t%lf"           // 15 : AR non frottant T12 (°C)
             "\t%lf"           // 16 : AR T13 (°C)
             "\t%lf"           // 17 : AR T14 (°C)
             "\t%lf"           // 18 : AR T15 (°C)
             "\t%lf"           // 19 : B81-T16 (°C)
             "\t%lf"           // 20 : Pression Huile (bar)
             "\t%lf"           // 21 : Pression Air (bar)
             "\t%lf"           // 22 : Débit Air (m3/h)
             "\t%lf"           // 23 : Blow-by (V)
             "\t%lf"           // 24 : Couple Moteur (Nm)
             "\t%lf"           // 25 : Coolant Pressure IN (bar)
             "\t%lf"           // 26 : Débit Huile (l/min)
             "\t%lf"           // 27 : Coolant Pressure OUT (bar)
             "\t%lf"           // 28 : Vitesse Moteur (tr/min)
             "\t%lf"           // 29 : B81-V2 (tr/min)
             "\t%lf"           // 30 : Consigne Vitesse Moteur (tr/min)
             "\t%lf"           // 31 : Consigne Pression Service (bar)
             "\t%lf"           // 32 : B83-VitC (Volts)
             "\t%lf"           // 33 : B84-VitC (Volts)
             "\t%lf"           // 34 : B85-VitC (Volts)
             "\t%lf"           // 35 : B86-VitC (Volts)
             "\t%lf"           // 36 : B87-VitC (Volts)
             "\t%lf\n"         // 37 : B88-VitC (Volts)
            // -----------------------
            ,szDate1           // 01 : Date absolue
            ,szHeure1          // 02 : Heure absolue
            ,dTempsRelatif1    // 03 : Temps relatif (s)
            ,dTempDAT          // 04 : DAT (°C)
            ,dTempEauIn        // 05 : Entrée Eau (°C)
            ,dTempEauOut       // 06 : Sortie Eau (°C)
            ,dTempHuile        // 07 : Entrée Huile (°C)
            ,dTempAirReservoir // 08 : Air Sortie Réservoir (°C)
            ,dTempB81T6        // 09 : B81-T6 (°C)
            ,dTempAmbiante     // 10 : Température Ambiante (°C)
            ,dTempB81T8        // 11 : B81-T8 (°C)
            ,dTempAVT9         // 12 : AV frottant T9 (°C)
            ,dTempAVT10        // 13 : AV non frottant T10 (°C)
            ,dTempART11        // 14 : AR frottant T11 (°C)
            ,dTempART12        // 15 : AR non frottant T12 (°C)
            ,dTempART13        // 16 : AR T13 (°C)
            ,dTempART14        // 17 : AR T14 (°C)
            ,dTempART15        // 18 : AR T15 (°C)
            ,dTempB81T16       // 19 : B81-T16 (°C)
            ,dPressionHuile    // 20 : Pression Huile (bar)
            ,dPressionAir      // 21 : Pression Air (bar)
            ,dDebitAir         // 22 : Débit Air (m3/h)
            ,dBlowBy           // 23 : Blow-by (V)
            ,dCoupleMoteur     // 24 : Couple Moteur (Nm)
            ,dPressionEauIn    // 25 : Coolant Pressure IN (bar)
            ,dDebitHuile       // 26 : Débit Huile (l/min)
            ,dPressionEauOut   // 27 : Coolant Pressure OUT (bar)
            ,dVitesseMoteur    // 28 : Vitesse Moteur (tr/min)
            ,dVitesseB81V2     // 29 : B81-V2 (tr/min)
            ,dConsigneVitesse  // 30 : Consigne Vitesse Moteur (tr/min)
            ,dConsignePression // 31 : Consigne Pression Service (bar)
            ,dB83VitC          // 32 : B83-VitC (Volts)
            ,dB84VitC          // 33 : B84-VitC (Volts)
            ,dB85VitC          // 34 : B85-VitC (Volts)
            ,dB86VitC          // 35 : B86-VitC (Volts)
            ,dB87VitC          // 36 : B87-VitC (Volts)
            ,dB88VitC);        // 37 : B88-VitC (Volts)




      // --- Montrer à l'opérateur que le programme fonctionne !
      // --- (afficher un symbole toutes les 1000 lignes traitées
      // --- avec un saut de ligne à l'écran tous les 10 symboles)
      if (++iCompteurTraitement == 1000)
      {
         iCompteurTraitement = 0;
         printf("
[file://\\o/
\\o/
]
");
         if (++iCompteurSymbole == 10)
         {
            iCompteurSymbole = 0;
            printf("\n");
         }
      }
   }
   printf("\nRecherche des impulsions terminee.\n");



  
   // --- Fermer et rouvrir en lecture le fichier des impulsions AERZEN
   fclose(pFichierAERZEN);
   pFichierAERZEN = fopen(szFichierAERZEN,"r");
   if (pFichierAERZEN == NULL)
   {
      printf("*** ERREUR A L'OUVERTURE DU FICHIER "%s" ***\n",szFichierAERZEN);
      goto fin_erreur;               
   }



  
   // --- Le fichier 2 est à relire dans la seconde étape :
   // --- Se repositionner au début et relire les 7 lignes d'entête
   rewind(pFichierIn2);
   for (i=0; i<7; ++i)
   {
      if (fgets(szBuffer2,TAILLE_BUFFER,pFichierIn2) == NULL)
      {
         printf("*** ERREUR : FIN PREMATUREE DU FICHIER "%s" ***\n",szFichierIn2);
         goto fin_erreur;
      }
   }



  
   // --- Détecter les paliers et calculer les débits correspondants              
   printf("\nRecherche des paliers :\nAvancement : \n");
   iCompteurSymbole = 0;
   while (1)
   {
      // --- Lire une ligne dans chacun des 2 fichiers avec sortie de la boucle
      // --- de traitement si la fin d'au moins un des 2 fichiers est atteinte
      if (fgets(szBuffer1,TAILLE_BUFFER,pFichierAERZEN) == NULL) break;
      if (fgets(szBuffer2,TAILLE_BUFFER,pFichierIn2) == NULL) break;




      // --- fichier 1 en entrée : Remplacer les virgules décimales
      // --- par des points décimaux et décoder les valeurs
      for (i=0 ; szBuffer1[i] ; ++i) if (szBuffer1[i] == ',') szBuffer1[i] = '.';
      sscanf(szBuffer1
            ,"%s"               // 01 : Date absolue
             " %s"              // 02 : Heure absolue
             " %lf"             // 03 : Temps relatif (s)
             " %lf"             // 04 : DAT (°C)
             " %lf"             // 05 : Entrée Eau (°C)
             " %lf"             // 06 : Sortie Eau (°C)
             " %lf"             // 07 : Entrée Huile (°C)
             " %lf"             // 08 : Air Sortie Réservoir (°C)
             " %lf"             // 09 : B81-T6 (°C)
             " %lf"             // 10 : Température Ambiante (°C)
             " %lf"             // 11 : B81-T8 (°C)
             " %lf"             // 12 : AV frottant T9 (°C)
             " %lf"             // 13 : AV non frottant T10 (°C)
             " %lf"             // 14 : AR frottant T11 (°C)
             " %lf"             // 15 : AR non frottant T12 (°C)
             " %lf"             // 16 : AR T13 (°C)
             " %lf"             // 17 : AR T14 (°C)
             " %lf"             // 18 : AR T15 (°C)
             " %lf"             // 19 : B81-T16 (°C)
             " %lf"             // 20 : Pression Huile (bar)
             " %lf"             // 21 : Pression Air (bar)
             " %lf"             // 22 : Débit Air (m3/h)
             " %lf"             // 23 : Blow-by (V)
             " %lf"             // 24 : Couple Moteur (Nm)
             " %lf"             // 25 : Coolant Pressure IN (bar)
             " %lf"             // 26 : Débit Huile (l/min)
             " %lf"             // 27 : Coolant Pressure OUT (bar)
             " %lf"             // 28 : Vitesse Moteur (tr/min)
             " %lf"             // 29 : B81-V2 (tr/min)
             " %lf"             // 30 : Consigne Vitesse Moteur (tr/min)
             " %lf"             // 31 : Consigne Pression Service (bar)
             " %lf"             // 32 : B83-VitC (Volts)
             " %lf"             // 33 : B84-VitC (Volts)
             " %lf"             // 34 : B85-VitC (Volts)
             " %lf"             // 35 : B86-VitC (Volts)
             " %lf"             // 36 : B87-VitC (Volts)
             " %lf"             // 37 : B88-VitC (Volts)
            // ------------------------
            ,szDate1            // 01 : Date absolue
            ,szHeure1           // 02 : Heure absolue
            ,&dTempsRelatif1    // 03 : Temps relatif (s)
            ,&dTempDAT          // 04 : DAT (°C)
            ,&dTempEauIn        // 05 : Entrée Eau (°C)
            ,&dTempEauOut       // 06 : Sortie Eau (°C)
            ,&dTempHuile        // 07 : Entrée Huile (°C)
            ,&dTempAirReservoir // 08 : Air Sortie Réservoir (°C)
            ,&dTempB81T6        // 09 : B81-T6 (°C)
            ,&dTempAmbiante     // 10 : Température Ambiante (°C)
            ,&dTempB81T8        // 11 : B81-T8 (°C)
            ,&dTempAVT9         // 12 : AV frottant T9 (°C)
            ,&dTempAVT10        // 13 : AV non frottant T10 (°C)
            ,&dTempART11        // 14 : AR frottant T11 (°C)
            ,&dTempART12        // 15 : AR non frottant T12 (°C)
            ,&dTempART13        // 16 : AR T13 (°C)
            ,&dTempART14        // 17 : AR T14 (°C)
            ,&dTempART15        // 18 : AR T15 (°C)
            ,&dTempB81T16       // 19 : B81-T16 (°C)
            ,&dPressionHuile    // 20 : Pression Huile (bar)
            ,&dPressionAir      // 21 : Pression Air (bar)
            ,&dQaerzen2         // 22 : Débit Air (m3/h) <=====
            ,&dBlowBy           // 23 : Blow-by (V)
            ,&dCoupleMoteur     // 24 : Couple Moteur (Nm)
            ,&dPressionEauIn    // 25 : Coolant Pressure IN (bar)
            ,&dDebitHuile       // 26 : Débit Huile (l/min)
            ,&dPressionEauOut   // 27 : Coolant Pressure OUT (bar)
            ,&dVitesseMoteur    // 28 : Vitesse Moteur (tr/min)
            ,&dVitesseB81V2     // 29 : B81-V2 (tr/min)
            ,&dConsigneVitesse  // 30 : Consigne Vitesse Moteur (tr/min)
            ,&dConsignePression // 31 : Consigne Pression Service (bar)
            ,&dB83VitC          // 32 : B83-VitC (Volts)
            ,&dB84VitC          // 33 : B84-VitC (Volts)
            ,&dB85VitC          // 34 : B85-VitC (Volts)
            ,&dB86VitC          // 35 : B86-VitC (Volts)
            ,&dB87VitC          // 36 : B87-VitC (Volts)
            ,&dB88VitC);        // 37 : B88-VitC (Volts)




      // --- fichier 2 en entrée : Remplacer les virgules décimales
      // --- par des points décimaux et décoder les valeurs
      for (i=0 ; szBuffer2[i] ; ++i) if (szBuffer2[i] == ',') szBuffer2[i] = '.';
      sscanf(szBuffer2
            ,"%s"            // 01 : Date absolue
             " %s"           // 02 : Heure absolue
             " %lf"          // 03 : Temps relatif (s)
             " %lf"          // 04 : Mode ESS
             " %lf"          // 05 : ???
            // ---------------------
            ,szDate2         // 01 : Date absolue
            ,szHeure2        // 02 : Heure absolue
            ,&dTempsRelatif2 // 03 : Temps relatif (s)
            ,&dModeESS       // 04 : Mode ESS
            ,&daa);          // 05 : ???




      // --- Traiter les données
      adConsignePression[0] = dConsignePression;
      adConsigneVitesse[0]  = dConsigneVitesse; 
      aiAerzen[1] = (int)dQaerzen2;
      if (dConsigneVitesse != 0.)
      {              
         // --- Tester la variation des consignes
         if
         (
            adConsigneVitesse[0] == adConsigneVitesse[1]
            &&
            adConsignePression[0] == adConsignePression[1]
         )
         {   
            // --- Les consignes sont les mêmes qu'avant
            // --- Traiter si :
            // --- * Vitesse  comprise entre +/-15  de la consigne
            // --- * Pression comprise entre +/-1.5 de la consigne
            if
            (
               dVitesseMoteur >= (dConsigneVitesse - 15)
               &&
               dVitesseMoteur <= (dConsigneVitesse + 15)



               &&
               
               dPressionAir >= (dConsignePression - 1.5)
               &&
               dPressionAir <= (dConsignePression + 1.5)
            )
            {                   
               adTablo[ 0] += dTempDAT;
               adTablo[ 1] += dTempEauIn;
               adTablo[ 2] += dTempEauOut;
               adTablo[ 3] += dTempHuile;
               adTablo[ 4] += dTempAirReservoir;
               adTablo[ 5] += dTempAmbiante;
               adTablo[ 6] += dPressionHuile;
               adTablo[ 7] += dPressionAir;
            // adTablo[ 8]
               adTablo[ 9] += dBlowBy;
               adTablo[10] += dCoupleMoteur;
               adTablo[11] += dPressionEauIn;
               adTablo[12] += dDebitHuile;
               adTablo[13] += dPressionEauOut;
               adTablo[14] += dVitesseMoteur;
               adTablo[15]  = dConsigneVitesse;
               adTablo[16]  = dConsignePression;
               adTablo[17]  = dModeESS;



               if (aiAerzen[1] == 1 && aiAerzen[0] == 0)
               {
                  if (iCompteurTempsRelatif == 0)
                     adTempsAerzen[0] = dTempsRelatif1;
                  else
                     adTempsAerzen[1] = dTempsRelatif1;
                  ++iCompteurTempsRelatif;
               }
               ++iCompteurMoyenne;
            }
         }
         else
         {
            // --- Les consignes sont différentes
            // --- Afficher les moyennes du palier (si possible)
            if (iCompteurMoyenne > 20) // éliminer les "faux paliers"
            {
               // --- Compter le palier détecté
               ++iCompteurPalier;




               // --- Calculer les moyennes
               for (i=0 ; i<=14 ; ++i)
                  if (i != 8) adTablo[i] /= (double)iCompteurMoyenne;




               // --- Calculer le débit [l/min]
               iCompteurTempsRelatif *= 10;
               dDiffTemps = (adTempsAerzen[1] - adTempsAerzen[0]) / 60;
               dDebitCalcule = (double)iCompteurTempsRelatif / dDiffTemps;
               iCompteurTempsRelatif = 0;




               // --- Ecrire dans le fichier des performances
               fprintf(pFichierPerfo
                      ,"%.0lf"         // 01 : Cons.V [tr/min]
                       "\t%.0lf"       // 02 : Cons.P [bar]
                       "\t%.1lf"       // 03 : DAT [Deg.C]
                       "\t%.1lf"       // 04 : Eau.IN [Deg.C]
                       "\t%.1lf"       // 05 : Eau.OUT [Deg.C]
                       "\t%.1lf"       // 06 : Huile [Deg.C]
                       "\t%.1lf"       // 07 : T.reserv. [Deg.C]
                       "\t%.1lf"       // 08 : T.amb. [Deg.C]
                       "\t%.1lf"       // 09 : P.huile [bar]
                       "\t%.1lf"       // 10 : P.air [bar]
                       "\t%.1lf"       // 11 : Blow-by [l/min]
                       "\t%.1lf"       // 12 : Couple [N.m]
                       "\t%.1lf"       // 13 : P.eau.IN [bar]
                       "\t%.1lf"       // 14 : Q.huile [l/min]
                       "\t%.1lf"       // 15 : P.eau.OUT [bar]
                       "\t%.0lf"       // 16 : V.moteur [tr/min]
                       "\t%s"          // 17 : E.S.S. [Oui|Non]
                       "\t%.2lf\n"     // 18 : Q.air[Aerzen] [l/min]
                       // --------
                      ,adTablo[15]     // 01 : Cons.V [tr/min]
                      ,adTablo[16]     // 02 : Cons.P [bar]
                      ,adTablo[ 0]     // 03 : DAT [Deg.C]
                      ,adTablo[ 1]     // 04 : Eau.IN [Deg.C]
                      ,adTablo[ 2]     // 05 : Eau.OUT [Deg.C]
                      ,adTablo[ 3]     // 06 : Huile [Deg.C]
                      ,adTablo[ 4]     // 07 : T.reserv. [Deg.C]
                      ,adTablo[ 5]     // 08 : T.amb. [Deg.C]
                      ,adTablo[ 6]     // 09 : P.huile [bar]
                      ,adTablo[ 7]     // 10 : P.air [bar]
                      ,adTablo[ 9]     // 11 : Blow-by [l/min]
                      ,adTablo[10]     // 12 : Couple [N.m]
                      ,adTablo[11]     // 13 : P.eau.IN [bar]
                      ,adTablo[12]     // 14 : Q.huile [l/min]
                      ,adTablo[13]     // 15 : P.eau.OUT [bar]
                      ,adTablo[14]     // 16 : V.moteur [tr/min]
                      ,adTablo[18] == 1. ? "OUI" : "NON" // 17 : E.S.S. [Oui|Non]
                      ,dDebitCalcule); // 18 : Q.air[Aerzen] [l/min]




               // --- Montrer à l'opérateur que le programme fonctionne !
               // --- (afficher un symbole après toutes les opérations
               // --- avec un saut de ligne à l'écran tous les 10 symboles)
               printf("
[file://\\o/
\\o/
]
");
               if (++iCompteurSymbole == 10)
               {
                  iCompteurSymbole = 0;
                  printf("\n");
               }
            }
            iCompteurMoyenne = 0;
         }
      }
      adConsignePression[1] = adConsignePression[0];
      adConsigneVitesse[1]  = adConsigneVitesse[0];
      adTablo[18] = adTablo[17];
      aiAerzen[0] = (int)dQaerzen2;
   }
   printf("\nRecherche des paliers terminee.\n\n");
   printf("--> Nombre de paliers detectes : %d\n",iCompteurPalier);
   printf("--> Resultats dans le fichier  : %s\n",szFichierPerfo);






   // --- Fermer tous les fichiers
fin_erreur :
   if (pFichierIn1)    fclose(pFichierIn1);
   if (pFichierIn2)    fclose(pFichierIn2);
   if (pFichierAERZEN) fclose(pFichierAERZEN);
   if (pFichierPerfo)  fclose(pFichierPerfo);



   printf("\n"
          "***********************************************************\n"
          "*         Fin du programme de lecture des paliers         *\n"
          "***********************************************************\n"
          "\n");
   system("PAUSE");
   return 0;
}




Jean-François