begin process at 2012 05 28 16:51:14
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

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


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

vendredi 23 mai 2008 à 19:58:31 | Besoin d'aide pour un programme de lecture et d'ecriture de fichier texte [DEBUTANT]

Manu014

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!

samedi 24 mai 2008 à 00:05:55 | Re : Besoin d'aide pour un programme de lecture et d'ecriture de fichier texte [DEBUTANT]

jfrancois

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

samedi 24 mai 2008 à 00:39:16 | Re : Besoin d'aide pour un programme de lecture et d'ecriture de fichier texte [DEBUTANT]

Manu014

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.
samedi 24 mai 2008 à 01:03:30 | Re : Besoin d'aide pour un programme de lecture et d'ecriture de fichier texte [DEBUTANT]

jfrancois

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

samedi 24 mai 2008 à 01:18:02 | Re : Besoin d'aide pour un programme de lecture et d'ecriture de fichier texte [DEBUTANT]

Manu014

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".
samedi 31 mai 2008 à 00:46:19 | Re : Besoin d'aide pour un programme de lecture et d'ecriture de fichier texte [DEBUTANT]

Manu014

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

samedi 31 mai 2008 à 01:50:08 | Re : Besoin d'aide pour un programme de lecture et d'ecriture de fichier texte [DEBUTANT]

jfrancois

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

samedi 31 mai 2008 à 02:05:09 | Re : Besoin d'aide pour un programme de lecture et d'ecriture de fichier texte [DEBUTANT]

jfrancois

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

dimanche 1 juin 2008 à 16:42:22 | Re : Besoin d'aide pour un programme de lecture et d'ecriture de fichier texte [DEBUTANT]

jfrancois

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

dimanche 1 juin 2008 à 16:55:41 | Re : Besoin d'aide pour un programme de lecture et d'ecriture de fichier texte [DEBUTANT]

Manu014

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.

1 2 3

Cette discussion est classée dans : fichier, printf, pression, ba, banc


Répondre à ce message

Sujets en rapport avec ce message

Petit probleme de code en C sur Linux !! [ par UncleShu ] Je voudrais créer un fichier dans le réperoire personnel d'un utilisateur mais mon code ne marche pas !!#include #include #include #define DIR $HOM Debutant : ecrire et lire un fichier txt [ par manu ] Bonjour a tous.Je debute, aussi desole.... :)Je cherche donc a ecrire dans un fichier txt, puis a lire ce fichier ligne a ligne, faire un split / expl Analyse fichier log a faire en C [ par Nexouille ] A l'aideeeeeeeeeeeeeeeeeeeeeeeeee***************************************Les serveurs web enregistrent la trace des visites dans des fichiers de log. C Aide fichier :) [ par asnow ] Salut a tous :)Voila mon tit code pour ouvrir un fichiervoid Ouverture () {char nomf[20]; printf("Entrez le nom du fichier :"); scanf("%s", nomf [C] lecture d'un fichier [ par GazGaz ] lu allalors voila en fait je lis un fichier en c et le probleme c'est que ce fichier est composé de lignes dont la taille exècede largement les 80 car Affichage d'une image BMP en C [ par sabres ] Voici le code source d'un début de programme écrit sous Turbo C/C++ permettant d'afficher les caractéristiques d'une image BMP et de l'afficher. Le pr probleme en langage C - URGENT!!!!! [ par mazo0012 ] bonjourjai un gros pb en C, si quelq'un pouvait m'aider apidement je commence a devenir dingue!!!!!!jexplike:tout simplement, j'essaye de saisir le ch Petit Bug [ par LordBob ] Bonjour a tous,voici deux fonctions:#include #include // Variableschar SourceFile[1024];char DestinationFile[1024];<b CRYPTAGE !!! [ par megaman ] Voilà j'essai de faire un log de cryptage à l'aide de fonctions et procédure.Les fonctions et procédures :Une fonction qui retourne le nom de fichieru [debutant]attribution dun mot a une char et comparaison ... [ par DarkEbola ] en fait, jaurais aimé attribuer du texte a une charkke chose comme 500 ou 600 caracteres maximais jarrive pas a lui attribuer plus de 1 Charsuis-je pl


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,477 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales