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

SL & STL C++ Discussion :

Utilisation de ifstream lire des fichiers commentés


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Par défaut Utilisation de ifstream lire des fichiers commentés
    Bonjour,

    Dans un programme, je lis un fichier avec un flux ifstream.
    Dans ce fichier, il y a des noms d'animation avec 4 coordonnées. Le nombre d'animation est donné en première ligne.
    Voila à quoi ressemble un extrait de mon fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    2
     
    droite0
    0 0 100 120
     
    droite1
    100 0 100 120
    J'avoue ne pas maîtriser du tout les flux ifsteam, malgré cela je suis arrivé à lire correctement les données du fichier de la manière suivante:

    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
    string s, nomanim, x, y, w, h;
    int nbanim = 0, i=0;
    ifstream input("monFichier.txt");
     
    input >> s;
    nbanim = atoi( s.c_str() );
     
    for(i=0; i<nbanim; i++) {
     
       input_spr_perso >> nomanim >> x >> y >> w >> h;
     
       /* Utilisation des strings contenant mes informations */
       /* Enregistrement des variables par exemples... */
     
    }
    Le programme fonctionne bien, mais j'aimerai ajouter des commentaires dans mes fichiers texte, par commodité. Je voudrais pas quelque chose d'élaboré comme les /* */ en C, mais juste pouvoir écrire des lignes précédé d'un symbole qui seront sautées à la lectures.
    Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #Nombre d'animation
    2
     
    #Vers la droite, image n°1
    droite0
    0 0 100 120
     
    #Vers la droite, image n°2
    droite1
    100 0 100 120
    Merci de votre aide !

  2. #2
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    salut,

    lire ligne par ligne
    parser une chaîne (par exemple la ligne avec les nombres)

    à chaque ligne du fichier que tu lis, vérifie si le premier caractère est celui d'un commentaire (#)

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Par défaut
    Ok merci pour les liens, je vais chercher dans cette direction.
    Je posterai de nouveau en cas de problème.
    Et dans le cas contraire, je posterais ma solution !
    ++

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Par défaut
    Finalement, à force de bricoler comme j'ai pu, j'ai trouvé une solution !
    Seul les lignes commencant par # sont supprimées.
    Voila je vous invite à jetter un oeil sur mon code pour m'assurer que rien n'est trop bancal !

    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
    // Lire un fichier en excluant les commentaires
    string lire_fichier(const string nom_fichier) {
     
    	stringstream tampon;
    	string ligne;
    	string no_comment = "";
     
    	// Ouverture du fichier
    	ifstream fichier( nom_fichier.c_str() );
    	if( !fichier )
    		return "";
     
    	// Lecture du fichier entier dans le tampon
    	tampon << fichier.rdbuf();
     
    	// Fermeture du fichier
    	fichier.close();
     
    	// Lecture ligne par ligne du tampon
    	while( getline(tampon, ligne) ) {
     
    		// On ajoute seulement s'il n'y a pas de # en premier caractère
    		if( ligne.find('#') != 0)
    			no_comment += ligne + '\n';
    	}
     
    	// Retour de la chaine sans commentaire
    	return no_comment;
    }
    Pour ensuite utiliser ce fichier en tant que flux, comme je le fesais avec un 'ifstream', je passe désormais par un 'istringstream' de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    string tampon;
    tampon = lire_fichier("monFichier.txt");
    if(tampon == "") {
    	s_erreur = "Erreur lors de l'ouverture du fichier.";
    	exit(EXIT_FAILURE);
    }
     
    // On transforme la chaine en flux
    istringstream input(tampon);
     
    /* La suite est la même qu'avant, utilisation du flux avec << */
    Je pense bien qu'en terme d'optimisation ca doit pas être au top, mais ca à le mérite de fonctionner.

  5. #5
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    En utilisant des streambufs filtrants (cf les 2 articles de James Kanze, et la bibliothèque qui en découle, ou encore l'adaptation côté boost (boost.iostream)), il y a moyen de filtrer des flux pour lire comme si les commentaires n'avaient jamais été présents.
    Pratique.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Par défaut
    Salut,

    Je me suis renseigné sur James Kanze et ses tutoriels, ils me semblent un peu longs et compliqués pour ce que je désire faire pour l'instant (surtout que mon code fonctionne), mais je garde le lien de coté par soucis d'optimisation à la fin du projet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment lire des fichiers mp3, wav et video ?
    Par Klemsy78 dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 11/12/2007, 11h34
  2. [Excel] Comment lire des fichiers excel avec php?
    Par dear_rihab dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 02/11/2007, 12h38
  3. comment lire des fichiers binaires
    Par compton dans le forum Autres Logiciels
    Réponses: 8
    Dernier message: 06/07/2006, 12h03
  4. Comment lire des fichiers d'extension src ?
    Par compton dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 04/07/2006, 16h37
  5. Lire des fichiers texte (des chaines de caracteres) ifstream
    Par jamesleouf dans le forum SL & STL
    Réponses: 1
    Dernier message: 22/03/2006, 23h58

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