begin process at 2012 05 29 17:24:10
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

Fichier & Disque

 > 

problème getline pour la lecture d'un fichier C++


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

problème getline pour la lecture d'un fichier C++

mardi 22 août 2006 à 09:12:12 | problème getline pour la lecture d'un fichier C++

janiaut

Bonjour, je suis novice dans la programmation en C/C++ et j'ai quelques problèmes sur la lecture d'un fichier. Je vous explique ce qu'on me programme doit faire :
Mon but est de lire un fichier "fichier.txt" contenant des chaines de caractères à verifier. Dans un premier temps le fichier contient

nondata
nondata
0
0

J'utilise la fonction getline mais lorsque je compare la valeur à "nondata", le test me retourne faux. Et je n'arrive pas a comprendre pourquoi, pouvez vous m'aider. Merci bcp voici le code

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <fstream>
#include <string>
#include <iostream>


using namespace std;

 *************************************************************************************************
// MAIN
// ------------------------------------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])

    char* chain;
    char* last = "00";
    char* valeur = "00";;
    char* current;
    char* next;

    std::ifstream fichier( "fichier.txt" );
    std::string ligne; // variable contenant chaque ligne lue
    if ( fichier ) // ce test échoue si le fichier n'est pas ouvert
    {
       // cette boucle s'arrête dès qu'une erreur de lecture survient
        if ( std::getline( fichier, ligne ) )
        {
            // créer le buffer pour copier la chaîne
            size_t size = ligne.size() + 1;
            char * buffer = new char[ size ];
            // copier la chaîne
            strncpy( buffer, ligne.c_str(), size );   //conversion strinf en char*
            // utiliser le buffer
            current = buffer;
        }
    }
    while(std::getline( fichier, ligne ))
    {
        // créer le buffer pour copier la chaîne
        size_t size = ligne.size() + 1;
        char * buffer = new char[ size ];
        // copier la chaîne
        strncpy( buffer, ligne.c_str(), size);
        // utiliser le buffer
        next = buffer;
        if(current == NULL) 
           current = "silence";
        if(next == NULL) 
           next = "silence";
        if(current == "silence")
        {
            if((last=="01")&&(last=="10"))
            {
                printf("erreur dans le fichier valeur non reconnue);
            }
            else
            {
                if(last=="00") valeur="00";
                else valeur = "11";
            }
        }
        else if(current == "nondata")           //problème du test !!!!!!!!!! HELP ME
        {                                                    // ne vas pas dans la boucle
         if(last=="00")
         {
             valeur="01";
         }
         else 
         if (last=="11") 
         {
             valeur="10";
         }  
         else if (last=="01")
         {
             if((next=="nondata")||(next=="zero")) valeur="10";
             else if((next=="one")||(next=="silence"))valeur="11";
             else printf("erreur dans le fichier valeur non reconnu");
         }
         else if (last=="10")
         {
             if((next=="nondata")||(next=="zero")) valeur="01";
             else if((next=="one")||(next=="silence"))valeur="00";
             else printf("erreur dans le fichier valeur non reconnu");
         }
         else printf("erreur dans le fichier valeur non reconnu");
     }
     else if(current == "one")
     {
         if (last=="00")
         {
             if((next=="nondata")||(next=="zero")) valeur="10";
             else if((next=="one")||(next=="silence"))valeur="11";
             else printf("erreur dans le fichier valeur non reconnu");
         }
         else if (last=="11")
         {
             if((next=="nondata")||(next=="zero")) valeur="01";
             else if((next=="one")||(next=="silence"))valeur="00";
             else printf("erreur dans le fichier valeur non reconnu");
         }
         else printf("erreur dans le fichier valeur non reconnu"); 
     }
     else if(current == "zero")
     {
         if (last=="01")
         {
             if((next=="nondata")||(next=="zero")) valeur="01";
             else if((next=="one")||(next=="silence"))valeur="00";
             else printf("erreur dans le fichier valeur non reconnu");
         }
         else if (last=="10")
         {
             if((next=="nondata")||(next=="zero")) valeur="10";
             else if((next=="one")||(next=="silence"))valeur="11";
             else printf("erreur dans le fichier valeur non reconnu");
         }
         else printf("erreur dans le fichier valeur non reconnu"); 
      }
      else
      printf("erreur dans le fichier valeur non reconnu");
      printf("%s",valeur);
      last = valeur;
     current = chain; 
    }
}

//------------------------------ MERCI BEAUCOUP   ----------------------------------

mardi 22 août 2006 à 10:13:43 | Re : problème getline pour la lecture d'un fichier C++

luhtor

Réponse acceptée !
Faut utiliser strncmp pour comparer deux chaines:
if (strncmp(current, "silence", 7) == 0)
    {
    }

Au passage, ca, c'est archi faux:
if(next == NULL) 
    next = "silence";

Mais pk tu mélanges string et char* ? utilise que des string...



mardi 22 août 2006 à 10:26:11 | Re : problème getline pour la lecture d'un fichier C++

janiaut

Je te remercie, je vais essayer cela ce soir car la j'ai pas de quoi développer.

Oui je sais que je mélange mais comme je suis novice, j'ai pris des bout de programme à droite à gauche. et certain avec des char* (calcul de CRC). Est-ce compliquer de tout changer, y'a-t-il une méthode simple pour rendre mon code "beau" et uniforme.

Merci

mardi 22 août 2006 à 11:06:36 | Re : problème getline pour la lecture d'un fichier C++

turnerom

La méthode de luhtor est la bonne pour ton problème sauf si utilise des string partout, dans ce cas == marche, ce que je te conseil .

Par contre pour rendre ton code uniforme et beau, tu peux le décomposer et ne pas tout mettre dans le main. Fait une fonction pour chaque test qui renvoi true ou false par exemple en fonction du resultat plus ton parametre valeur passé par référence a chaque fonction pour pouvoir être modifié!



TuRn3r
mardi 22 août 2006 à 13:33:11 | Re : problème getline pour la lecture d'un fichier C++

janiaut

Merci beaucoup a tous, avec vos info cela devrait marché.
mercredi 23 août 2006 à 09:46:04 | Re : problème getline pour la lecture d'un fichier C++

janiaut

Réponse acceptée !

Merci a tous vous m'avez bien aiguillé, en fait j'ai tout passé en string et effectué les test de la manière suivante :

string var;

if(var==(string)"nondata") ....

encore merci   luhtor et turnerom  



Cette discussion est classée dans : fichier, erreur, valeur, next, last


Répondre à ce message

Sujets en rapport avec ce message

erreur de demarrage programme [ par nango ] Quand je compile sous visual c++ il m'apparait le message d'erreur suivant : "un fichier.DLL requis, MSPDB60.DLL, n'a pas été trouvé".Pourtant ce fich La valeur 26=0x1A pose un problème de lecture de fichier [ par sengr ] Salut!Jsuis en stage et jsuis pas un AS du dévelopement et ca URGE!J'ai rencontré un BIG problème : le coup du de la valeur 26=0x1A avec les fonctions Ouvrir et lire un fichier txt [ par pirana ] Bonjour à tous jaimerai faire un programme qui me permet d'ouvrir un fichier txt puis le lire jusqua la fin( normalement avec une boucle while(!feof(f Erreur sur fichier [ par LordBob ] Bonjours a tous,voila je suis en train d'écrire un petit programme... Et j'ai a peine commencé que j'ai deja un probleme, seulement je ne sais pas d'o config.msi [ par coockiesch ] Hello! J'ai créé un exe et créé avec visual studio un installateur. Je peux installer mon prog sans problême mais lorsque je veux le désinstaller j'ob Erreur "Abandon" [ par patrickbateman ] Bonjour a tous,j'ai cree un petit programme en c, une fois compile par GCC l'execution se passe tt a fait normalement sauf qu'il affiche "Abandon" a l fichier ini marche pas??!! [ par goondy ] SAlut!Bon, j'ai besoin d'un fichier ini pour une appli... je le fais comme çà:[lecteurs]ibead=I:pc=E:\Musique[autorun]auto=0[copie]suivrem3u=0copierm3 fichier edit box [ par revelata ] Il me met erreur disp erreur INVALID_HANDLE_VALUE! Je comprend pas cette erreur mon fichier est bien là où je ledis! (bool) probléme avec une variable bool [ par Xilofeon ] Salut a tousquestion d'un débutant confirmé lol !!!alors voila j'ai une variable bool a utilisé dans plusieur fonction dont 1 void dans le fichier .cp enreg et lecture dans fichier [ par musco ] salut je desirai garder des infos dans un fichier (ATTENTION JE SUIS EN C ET NE VEUT PAS DE C++)alors en faite je fais saisir par l'utilisateur le nbr


Nos sponsors


Sondage...

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 : 0,562 sec (3)

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