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

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

C++ Discussion :

les fichier en c++


Sujet :

C++

  1. #1
    Membre habitué
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Par défaut les fichier en c++
    bonjour j'ai un petit souci concernat les fichiers en c++ , je vous explique.
    j'ai un fichier qui contient une liste des noms des fichiers, je lis ce fichier , et je crée une liste dynamqie pour mettre chaque nom du fichier dans un enregistrement, aprés je veux lire le contenu de chaque fichier dans la liste, pourcela je fait une boucle sur la liste et j'ouvre le fichier, sa souvre normal , mais j'arrive pas a lire le contenu, urgent svp, voila mon code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    int main()
    {
     
    	    list<string> fichierSIWIM;
    		list<string> ff
    		typedef vector<chanel> listeCapteur;    
            typedef vector<chanel>::iterator iterateurchanel; 
    	    int s;
     
            ifstream fichier("nomfichier.txt", ios::in|ios::binary);
     
            if(fichier)   
            {
                    string ligne;	
                    while(getline(fichier, ligne))     
    	{
               fichierSIWIM.push_back(ligne); 
    	} 
    	fichier.close(); 
    	cout << "le nombre de fichier SiWIM est " << fichierSIWIM.size()<< endl;  
    		}
            else
                    cerr << "le fichier nomfichier n'existe pas" << endl;
     
    	std::list<string>::const_iterator           
                 lit = fichierSIWIM.begin(),                 
                 lend = fichierSIWIM.end(); 
                 string nomFichier;          
                  for(;lit!=lend;++lit)                      
    		{
    		nomFichier=(*lit);	
    		string ligne1;                     				             ifstream fichier1 ;  			
    		fichier1.open(nomFichier.c_str());	// ici le fichier s'ouvre normal
                              ligne1=fichier1.get(); // ici j'arrive pas a lire le contenu de fichier
    		cout <<ligne1<<endl;		
    		nomFichier="";
    				}						
    		scanf ("%d",s);    
            return 0;
    }

  2. #2
    Membre expérimenté
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 227
    Par défaut
    Tel que tu utilises la méthode get,
    int get();
    Extracts a character from the stream and returns its value (casted to an integer).
    Tu ne peux pas récupérer une string. Pourquoi n'utilises tu pas la méthode getline() comme précédemement
    istream& getline ( istream& is, string& str, char delim );
    istream& getline ( istream& is, string& str );

    Get line from stream
    Extracts characters from is and stores them into str until a delimitation character is found.

    The delimiter character is delim for the first function version, and '\n' (newline character) for the second. The extraction also stops if the end of file is reached in is or if some other error occurs during the input operation.

    If the delimiter is found, it is extracted and discarded, i.e. it is not stored and the next input operation will begin after it.

    Notice that unlike the c-string versions of istream::getline, these string versions are implemented as global functions instead of members of the stream class.
    Tu devrais également tester que ton fichier est bien ouvert avec la méthode is_open par exemple.

  3. #3
    Membre habitué
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Par défaut re
    merci, pour la réponse .
    le fichier est bien ouvet je fait un test sur.
    j'ai essayé getline(fichier1,ligne1); et sa marche pas.

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    En effet, le suffit pour tester si l'ouverture s'est bien passée. Par contre le message d'erreur est pas terrible, car une ouverture de fichier peut échouer pour tout un tas de raisons.

    Au vu de ton problème et de ton code, je constate 2 choses:
    1. ton code est assez bordélique
    2. tu fais plusieurs fois la même chose: lire un fichier et stocker le résultat dans in vecteur de string

    Afin de résoudre ces 2 problèmes, je pense que le mieux serait de créer une fonction qui lit ton fichier et retourne un vecteur de string. Cette fonction aurait une de ces signatures:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef std::vector< std::string> StringVector; // juste pour simplifier le code
     
     
    StringVector ReadFile( std::ifstream & file );
    // ou
    void ReadFile( std::ifstream & file, StringVector & file_contain );
    Tu pourrais même, selon le contexte, inclure l'ouverture du fichier dans cette fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    StringVector OpenAndRead( const std::string & filename );
    // ou
    void OpenAndRead( const std::string & filename, StringVector & file_contain );

  5. #5
    Membre habitué
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 11
    Par défaut re
    je vois que t'as pas compris le probléme , j'ai un fichier qui contient des noms des fichiers, moi je voudrais exploiter les informations qui se trouve dedans, pourcela , j'ouvers mon premier fichier et je stock les nom dans une liste, et puis je fait le parcour de cette liste pour ouvrire les fichier,
    le probléme c'est que getline(fichier,ligne), sa marche bien dans la premiere fois, mais a partir de la deuxiéme fois sa marche plus. c sa le probléme ,j rien répété .

  6. #6
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Si, j'avais bien compris.
    Mais il n'y a aucune raison pour que le second getline ne fonctionne pas.
    Le problème est donc ailleurs.
    Par conséquent, pour trouver ce problème, il faut organiser ton code.
    Je ne connais pas ton contexte, mais il y a 95% de chances pour que la fonction qui lis un ficher et met son contenu dans un tableau de string réponde à tes besoins, tant pour la lecture du premier fichier, que pour les autres.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Hello

    ce que tu veux faire est facile, je ne vois pas ou est le problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include <string>
    #include <fstream>
    #include <iostream>
    #include <vector>
    #include <algorithm>
     
    void AfficherContenu(const std::string& iFileName)
    {
    	std::ifstream fichier(iFileName.c_str());
        if ( fichier )
        {
            std::string ligne;
            while ( std::getline(fichier, ligne))
    			std::cout << ligne << std::endl;
     
    		fichier.close();
    	}
    }
     
    int main()
    {
        std::ifstream fichier( "liste.txt" );
        std::vector< std::string > listeFichiers;
        if ( fichier )
        {
            std::string ligne;
            while ( std::getline(fichier, ligne))
    			listeFichiers.push_back(ligne);
     
    		fichier.close();
        }
     
    	std::for_each(listeFichiers.begin(),listeFichiers.end(),AfficherContenu);
    }
    Affiche

    Allo fichier2 ? Ici fichier 1.
    Hello fichier1, ici fichier2 je te reþois 5/5. Fichier 3 tu viens pour l'apero ?
    Ca roule j'arrive les poulets.

  8. #8
    Membre expérimenté
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2008
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 227
    Par défaut
    Est ce qu'il t'est possible de fournir des fichiers d'exemple car il n'est pas facile de définir pourquoi le getline() ne marche pas.
    Juste pour être bien sur, quand tu dis que celà ne marche pas, il y a une erreur à l'exécution, ou bien le string est vide?
    Dans ton exemple je ne vois où est déclarée la variable fichier1.

  9. #9
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Citation Envoyé par la_fouf Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier1.open(nomFichier.c_str());	// ici le fichier s'ouvre normal
    Comment sais-tu que le fichier c'est bien ouvert ? Qu'il n'y avait pas un problème dans la ligne lue ? F.A.Q. Comment tester l'existence d'un fichier ?

    Citation Envoyé par la_fouf Voir le message
    j'ai essayé getline(fichier1,ligne1); et sa marche pas.
    Comment savoir si la lecture / écriture dans un fichier a réussi ?

    En rajoutant ces quelques traces, tu devrais plus rapidement identifier ton problème

Discussions similaires

  1. [TP]comment creer une disquette bootable (les fichiers)
    Par ludovic5532 dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 25/10/2003, 18h46
  2. Réponses: 4
    Dernier message: 16/08/2003, 13h21
  3. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 15h44
  4. [TP]Lister les fichiers d'un répertoire
    Par nvtitan dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 21/06/2002, 11h22
  5. Les fichiers d'un projet
    Par Manolo dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/05/2002, 17h51

Partager

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