Accueil > Forum > > > > Besoin d'aide pour un programme de lecture et d'ecriture de fichier texte [DEBUTANT]
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.
|
|
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
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|